うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

#なごやこわい に囲まれながら1年間でやったこと

勉強し始めてとか以前にまとめたけど、個人的にはこの1年間はとても刺激的でとても楽しかったです。
次の1年が色あせないためにもちょっと備忘録しておこうかと。
名古屋エンジニア以外との影響についても書いておきます。

はじめに

僕は2011/09から名古屋市のとある会社で働き始めました。それまでは東京で4年ほどプログラマーとして働いていました。今も憧れ続けているid:bleis-tift (@) さんに誘ってもらって転職しました。
詳細はこちらに書きました。


そして、名古屋で働いて約1年たちました。ちょっぴり変わっていて、とっても刺激的な毎日を送りました。
これはその備忘録です。僕が名古屋にきてから何を学んだのか。名古屋だから学べた事もそうでない事もあると思うけど。僕の大切な思い出です。


テスト

なんかいろいろやりました。やっています。
内定をもらった直後くらいから本格的に勉強しはじめました。
いろいろやっていますが、中途半端もたくさんあります。でもやっています。
基本的には【ソフトウェアテストを勉強しはじめて10ヵ月でやったこと - うさぎ組】です。ここではリンク先のエントリに無い事を追記します。


Nagoya.Testing というテストプロセス入門ハンズオン勉強会を3度やりました。午前中にセッション、午後からテスト計画 〜 実施結果報告(実施結果報告まで出来なくてもよい)というイベントです。
詳細は「Nagoya.Testing」「#NagoyaTesting」をググってみてください。


テストの書籍をあらたに購入するというのはこの半年ほとんどなかった気がしています。
どちらかというと「○○のテストをしたいので、○○が何かを基礎から知りたい!」ということのほうが多いです。
それで今は業務的にパーサー、DBなどを勉強しています。独自DSLをテストする方法とか、DBのテストを効率的にすすめるためのフレームワークとかツールを試したり、作ってもらったり。今はマイグレーションツールを設計したりしています。


ところで、ソフトウェアテスト仕様書をつくる前の段階があるのをご存知でしょうか?
テストにも設計があります。なので、ソフトウェアテストにもプロセスを定義できます。そして、テストコミュニティではテストアーキテクチャという概念も定義されてきました。
僕もテストアーキテクチャとかテストモデリングの作成をどんどん試していますが、いろいろ変わり過ぎてよくわからなくなってきている時期ですw
NGT -> よくわからないもの -> NGT -> よくわからないもの -> NGT -> よくわからないもの -> NGT -> よくわからないもの というループです。(NGTは電通大のにしさんが提案しているテストアーキテクチャをメインにしたテスト手法です)
それでも少しずつ見えてきたので楽しいですね。


テストで今興味をもっていることは、UXと実装とテストの関係、テストの品質、テストの特性、などです。それ、どんなことよ?って思われた方はTwitterとかでリプライもらえると「ふわっと」ですがお話しませうw (つまり、しっかりとブログに書けるほどの何かを自分の中で確立できていません。

参考書籍

ビューティフルテスティング ―ソフトウェアテストの美しい実践 (THEORY/IN/PRACTICE)

ビューティフルテスティング ―ソフトウェアテストの美しい実践 (THEORY/IN/PRACTICE)

ソフトウェアテスト293の鉄則

ソフトウェアテスト293の鉄則

ソフトウェアテスト技法

ソフトウェアテスト技法

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

Growing Object-Oriented Software, Guided by Tests (Addison-Wesley Signature Series (Beck))

Making Software ―エビデンスが変えるソフトウェア開発

Making Software ―エビデンスが変えるソフトウェア開発

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)


Software Testing ManiaX

Android 2.2

会社に入って1monthくらいたったらやることになりました。なんかすごく大変でした。
参考書籍は結局買わなかったですね。あればよかったんでしょうけど、「体系的日本語書籍」が見つからなくって自分には難しかったです。(僕自身の傾向から言うと体系的な書籍のほうが学習効率がいい
現状のAndroid4.xとかも楽しそうだなーって思っていてやりたいです。
Androidアプリも3ヶ月くらいだけやっただけなので、なんかこう、優れた何かというのは言えないです。(他でも言えないけど。

このときに調べたりしたFWは

  • Robolectric
  • NativeDriver
  • SpringAndroid
  • SimpleFramework

使っていたツール

  • IntelliJ IDEA (12からはGUIデザインもできる!(当時は10.5とか11だった
  • Gradle (Androidアプリのビルドできます
  • PowerShell (manifestファイルをビルド時に書き換えるスクリプトとして

当時の知識で話す事はできるけど、最新だといろいろ事情が異なるんだろうなぁと思います。
Webで参考になったのは結局本家サイトでした。あとそれの日本語訳。

C#

命名規則Javaと違うのでチグハグしてしまったり、時間がなくって弊社ライブラリで提供しているEitherとかOptionとか使えなかったりとかいう経験をしました。
いまなら最初からEitherとかOptionを使える気がします。


NUnitがVSと統合されていない(JUnit + IDEのようではない)現実に驚いたのが懐かしいです。
調べものは基本的にMSDNだったり、@さんのブログだったり、@に質問したりだったり。
ちょっとかぶりますが、C# をやっていて感じたのは、C# 自体は素晴らしいのですけど、Java/Groovyと比較すると、エコシステム(ツールとか)が貧弱でそこの文化で戸惑う事が多いです。


もっとC# に詳しくならないとなーと思いつつ、書く機会が少ないのでどうしても後回しに。。。


参考書籍

C#ショートコードプログラミング (MSDNプログラミングシリーズ)

C#ショートコードプログラミング (MSDNプログラミングシリーズ)

プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)

プログラミング.NET FRAMEWORK 第3版 (Microsoft Press)

.NETのクラスライブラリ設計 (Microsoft.net Development Series)

.NETのクラスライブラリ設計 (Microsoft.net Development Series)

参考Web

id:bleis-tift


F#

たぶん会社で僕が一番か二番に触っている言語。職場的な意味では僕がテストエンジニアっていうのが大きいかもしれませんが。


F# は書いていてすごく楽しいです。僕が静的型付け関数型を仕事で使った初めての言語ですね。
ある日会社についたら@ に「実践F#」を渡されて@に「F# (O′Reilly)」を渡されて「じゃあ、よろしく」とF# をやることになった朝が懐かしいです。。。


これらの書籍を読みつつ、F# MVP たちのブログを読む。というのが勉強のスタイルでした。
いま困っているのはNaturalSpecの体系的ドキュメントがほしい。というところです。あとFParsecも。


F# はC# に輪をかけてエコシステムが残念ですが、まだ若い言語なのでこれからに期待しています。なんというか、僕はハッカーではないので、エコシステムがちょっと弱いだけですぐにくじけます。これを愛がないとか言われればそうかもしれないけれど。
面白いのは、名古屋ではF# は少数派なイメージがありますが、どうなのでしょうかね。弊社の共通言語はF# かBNFなので、世の中にF# プログラマーがたくさんいるように錯覚します。

参考書籍

実践 F# 関数型プログラミング入門

実践 F# 関数型プログラミング入門

プログラミングF#

プログラミングF#


Ruby

僕がF#と1,2を争うくらいに使っている言語。テストでですけどね。
Rubyはどうやっておぼえたのであったろうか。。。たしか、CoffeeScriptをちょっと調査したあとにRubyに手をつけ始めたらすんなりできました。


CoffeeScriptはGroovyと似ているのですんなりはいれました。
@曰く「Groovyができる->CoffeeScirptができる->Rubyができる。だからきょんくん大丈夫」とか言われて「この忍者は何を言っているんだろう。。。」って思っていたけどある程度手順を踏めばその通りでした。でも、彼がそのとき言ったのは「すぐにできる」って意味だったと思うのでやっぱりおかしいと思い直しました。


そのうち基礎からやりたいですね。Ruby基礎勉強会もいいと思いますし、JRubyの実装を調べるのも楽しそうだなーとか。
InvokeDynamic!(ちが
Rubyはなんだかんだで公式ドキュメントを一番読んでいる気がします。素晴らしいのはドキュメントがirbとかで見れるところですね。

参考Web

ドキュメント

参考書籍

リファクタリング:Rubyエディション

リファクタリング:Rubyエディション

Git

会社ではGitを強制されているので、使っています。未だにcheckoutとupdateを混同するレベルのhg脳です。
でも、SCMBootCampをやっているおかげでかいろいろ話を聞けたり、資料もあったりするので簡単なコード共有には困っていません。
bleis-hook便利です。
Gitで困ったらProGit読めばなんとかなるじゃんねー。くらいの勢いです。Gitはコマンド体系がダメなので、予想しないコマンドオプションがあって、ある意味で驚きの発見があります。(白目

参考書籍

入門Git

入門Git

実用Git

実用Git

OCaml

OCamlのこと書籍でさらっと読んだくらいしか知らなかったのにある日突然1ヶ月後にLTすることになった。というなんとも不思議な付き合いの言語です。


OCamlはとても綺麗に書けるし、個人的にとても好きです。Macで使っている分には。
F# 2.0とOCaml3.xはある程度シンタックスが似ているので、どちらかをやっているともう一方をまぁなんとなく覚え易い気がします。あくまで気がする程度です。(OCamlをあまり知らない状況で1ヶ月で多相ヴァリアントの話をするって大変だった。。。という闇の記憶。。。


ちなみに今設計しているDBマイグレーションツールOCamlでつくりたいなーって考えています。(Windows対応とか知らん!
OCamlはわからないことがあっても、@ さんがサクサク教えてくださるのでとても勉強になります。なんかOCamlの基礎的なところはわからないのですが、名古屋にはガリグ先生がいらっしゃったり、ITPLというこわい会社があったり。。。
前に名古屋に引っ越したばかり(まだ関数型言語を仕事で触る前)のころ、ある勉強会に『関数型言語初心者』として行った時、Coqという言語の解説になり


某「○○。。。ってあるけど、きょんくんわかりますか?」
きょん「すいません。わからないです。」
某「きょんくんは、HaskellOCamlどっちわかる?」
きょん「。。。!?」


僕がこの一年で得た印象は「名古屋の公用語OCaml」ということでした。


参考書籍

プログラミングの基礎 (Computer Science Library)

プログラミングの基礎 (Computer Science Library)

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~

プログラミング in OCaml ~関数型プログラミングの基礎からGUI構築まで~



Groovy

会社では僕がちょっとしたスクリプトとして使っています。ローカルでTDDするときの第一歩としてXMLとかJSONを返すHTTPサーバーをちょこっと書いたりが多いです。
プライベートではいろいろ書いていますが、最近はGroovyのソースコードリーディングが多いです。すこーしずつ詳しくなってきました。


TDDイベントで僕がGroovyユーザーを増やしているのは、Groovyがかわいいからという理由は2割くらいで、食わず嫌いせずにいろいろやってみようぜ!しかもJavaユーザーなら簡単に使える!っていう感じです。Groovyの言語仕様が素晴らしいとはあまり思っていないというか、便利なやつだなーくらいに思っていて、下手したらPHPの二の舞になりそうでちょっとビクビクしていますw


でもでも、ASTとかメタプログラミングとかすごいなーと思う機能もあるし、独自にMOPを実装していたりとか勉強になります。

参考書籍

プログラミングGROOVY

プログラミングGROOVY

Groovyイン・アクション

Groovyイン・アクション

Griffon in Action

Griffon in Action


アジャイル

アジャイル開発にこだわっているわけじゃないんですけど、アジャイル開発たのしそうなので勉強しています。そのうちScrumBootCampにも参加したり、いろんなことに挑戦したいです。


要求、タスク、テスト、バグ、リリース、ソフトウェアをうまく連携したいよなーって思い描きながらいろんなことを思考実験する日々です。
小さいものであれば会社でちょこっと試したりしています。
アジャイルはマインドだーっていう話はよく聞きますし、僕も聞かれたらそう答えることが多いですが、自分達が『ソフトウェア開発者として』幸せになれる手助けになっているんじゃないかなーって思っています。
たぶん、「仕事内容によって積極的に幸せになろうとする」ことに興味がない人にはアジャイルは向かないんじゃないかなーって思います。


アジャイルで今興味があるのは、クリティカルなプロジェクトでのアジャイルにやる手法ってどんなことができるんだろうっていうところですね。なので、Chromeの検索は最近はmedicalがよく入りますw


参考書籍

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

アジャイルソフトウェアエンジニアリング (マイクロソフト関連書)

アジャイルソフトウェアエンジニアリング (マイクロソフト関連書)

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)

実践アジャイルテスト テスターとアジャイルチームのための実践ガイド (IT Architects’Archive ソフトウェア開発の実践)




勉強会

次の勉強会をやりました。
詳細はぐぐってください><
もし、開催してほしい勉強会があればご連絡ください。お金とか時期とか都合がつけばぜひぜひ協力させてください。

  • Nagoya.Testing1
  • Nagoya.Testing in Tokyo
  • Nagoya.Testing in Yushima
  • SCMBootCamp in Tokyo 2
  • SCMBootCamp in Nagoya
  • SCMBootCamp in Tokyo 3
  • StartupGroovy
  • 継続的デリバリー読書会 #CDStudy
  • Cafe.Testing (@ が主催していて、僕は講師
  • TDD in Action


発表もいろいろやりましたー。もう数えきれないですーw
(そのうち、いくつが無茶ぶりで発表させられたのか。。。



まとめ

ほとんどの分野において、@さんに聞けます。@さんチートすぎます。
名古屋にいると、OCamlで話すことが多くなります。
完全とか検証とか証明とか継続とか型とかいろんな言葉にビクビクします。
意味不明なハッカソンをしている人がいてもながせるようになります。
地味にテストエンジニアが結構います。たのしいです。
Groovyプログラマーもおおいです。


名古屋はこわいたのしいです!