エンジニアの近況 2013年新春編 第1回 外村編
ピクセルグリッドのフロントエンドエンジニアひとりひとりに2012年の仕事を振り返ってもらいました。2011年と比べてエンジニアとしてどんな成長をしたのかにも注目しています。第1回目は外村です。
2012年、これがあって助かった!ベスト3
1. Ruby
去年の後半くらいからRailsでアプリケーションを作りたいと思ってRubyを勉強し始めたんですが、意外と仕事でも役立つことが多かったです。
例えばJekyllという静的サイトをジェネレートするためのライブラリと、そのプラグインを使って静的ファイルのコンパイルを行ったり、Railsのアセットパイプライン*という機能を提供しているSprocketsというライブラリを使ってフロントエンドの開発環境を構築したりしました。
*注:アセットパイプライン
CoffeeScriptやSassなどをコンパイルしたり、JavaScriptやCSSの結合、圧縮などをおこなうRailsの機能です。
- 参照:アセットパイプラインーRailsドキュメント
最近ではCoffeeScriptやSass、LessやStylusなどフロントエンドで使うツールがいろいろありますが、それらはほとんどNode.jsかRubyで作られているので、Node.jsとRubyが使えるとフロントエンドでの開発においても捗ることが多くなると思います。
2. Backbone.js
去年の4月のときに高津戸が1位にあげていますが、私自身はそのときはまだあまりBackbone.jsを触っていませんでした。使い始めたのはそれ以降なので、使い始めてまだ半年くらいですが、シンプルさや設計のバランスなど、とても気に入りました。
JavaScriptでアプリケーションを構築するたびに設計をどうするかいつも試行錯誤していて、そのたびにうまくいかないなと思っていたんです。が、Backbone.jsを使うようになってから設計の指針のようなものがある程度自分の中でできて、設計するのが楽になりました。
Backbone.jsについてはCodeGridの「Webアプリ構築のためのBackbone.js入門」シリーズにも書きましたので、そちらも参考にしてみてください。
3. Mocha
MochaはJavaScriptのテストフレームワークです。去年はJavaScriptのテスト手法をいろいろ試してみて、一番手に馴染んだのがMochaでした。
Node.js(バックエンド)とフロントエンドの両方で使えることや、さまざまな形式で出力できること、非同期のテストが容易なことなど、多数の利点があり、テストを書くという作業がとても効率的になりました。
また昨年、テスト関連でSinon.jsも使い始めて、とても便利だと思いました。これはスタブやモック*などを用いてテストをやりやすくするためのライブラリです。
*注:スタブとモック
ここではあまり深く触れませんが、テストしたいコードと関係ないオブジェクトやメソッドを一時的に上書きするなどして、テストをしやすくするための仕組みです。
CodeGridでもJavaScriptのテストの話は今後連載する予定なので、おそらくそのときにMochaやSinon.jsの詳細な解説を紹介できると思います。
2012年、ハマりました!ベスト3
1. PayPal
CodeGridはPayPalを利用して決済をおこなっているのですが、PayPalのAPIにさんざん苦しめられました。
どこに情報があるのかがわかりにくいというのもありますし、ドキュメントに書いていない挙動をしたり、そもそもドキュメントが間違っているということもありました。
技術サポートに問い合わせるとかなり丁寧に教えてくれるということがわかったので、ドキュメントを見てもわからない場合は、サポートに問い合わせるといいんだなということがわかりました。
2. Android
去年もこのシリーズのハマったランキングで何度も登場しているAndroidですが、今年も安定してハマりました。
特に昨年小山田が挙げている、GPUレンダリングの件にどっぷりとハマりました。GPUレンダリングを有効にしているライブラリを使わないといけないケースがあって、それが原因で予期せぬところまでバグって大変でした。
可能であればAndroidにおいては極力GPUレンダリングを有効にするべきではないと思いました。
3. RubyとJavaScript
Rubyを勉強し始めたことは前述しましたが、RubyとJavaScriptを交互に書いていると、仕様が混ざってハマることが何回かありました。
例えば、JavaScriptだと空文字は偽とみなされますが、Rubyでは真とみなされます。
JavaScriptの場合
if (!url) {
throw new Error('url is required');
}
Rubyの場合
if !url
raise 'url is required'
end
上記のコードを実行した場合、JavaScriptだとurlが空文字のときにif文の中は実行されますが、Rubyはurlが空文字のときにif文の中が実行されません*。
*注:JavaScriptとRubyの違い
Rubyにおいて偽と判定される値はnil(JavaScriptでいうnull)とfalseだけです。
このような仕様の違いがあったときに、JavaScript気分でRubyを書いてしまって思わぬバグになってはまることがありました。
2012年「これから、この技術をあれこれしてみたい」、その後の進捗は?
昨年の4月には「Webアプリケーションを作りたい」と言っていました。が、昨年は書籍の執筆がいっぱいいっぱいでWebアプリケーションは軽めのものを2つしか作っていません。
1日1つ目標を立てツイート。1日の終わりにそれが達成できたかを記録。小さい達成感を積み上げて、毎日のモチベーションを上げるWebアプリケーション。
12月1日から25日まで1日ずつ技術系のネタをブログに投稿していくというAdvent Calenderの作成や登録ができるWebアプリケーション。
初めてRailsでアプリを作ることができたのはよかったです。また、HerokuやSqaleなどのクラウドを使ってみて、どのようなことができるのか、何が便利なのかを知ることができました。そういう意味では去年言っていたことの準備運動くらいは済ませることができたと思います。
今年こそは運用や課金を視野に入れた、もう少し大きめのWebアプリケーションを作りたいです。
2013年、こんな仕事がしてみたい
CodeGridをサービスとして伸ばす
今年からCodeGridを専任でやるので、CodeGridをよりよいサービスにしたいと思います。技術的におもしろいことがやりたいというよりは、サービスをどのようにして伸ばしていくのかというところに注力したいと思っています。
英語の習得
仕事や技術ではないですが、今年は英語の勉強に力をいれたいと思っています。
エンジニアをやる以上、英語は必須です。英語のドキュメントを読むことができるというのは最低限ですが、英語のブログや書籍が読めると、最新の技術をキャッチアップすることができます。また、GitHubなどで自分が興味があるプロダクトに対して、意見を言ったり議論に参加することができれば技術者としての幅は大きく広がります。
また、去年jQuery ConferenceやNodeConfなどの海外のカンファレンスに参加してみて、より英語の必要性を感じるようになりました。プログラミングの世界では、やはり英語が中心なのです。
英語の勉強の一環として、去年の12月くらいからenja-ossというプロジェクトに参加しています。
オープンソースソフトウェアの翻訳を行うプロジェクトでGitHub上にリポジトリが公開されている。
このプロジェクトはOSS(オープンソースソフトウェア)の翻訳を行うというもので、Backbone.jsやSassなど、フロントエンドで使われるライブラリなどのドキュメントを中心に翻訳が行われています。
英語に自信がない人でも、翻訳の上級者の方に訳した文章を見てもらうことができる、監訳というフローがあるので、安心して翻訳に参加できます。また、普段隅々まで目を通すことが少ないドキュメントを訳すと、英語力の向上に加えて技術力の向上にも効果があります。
まだ翻訳作業中のプロジェクトも多数ありますので、興味がある方はぜひenja-ossに参加してみてください。