| @技術/プログラミング

Rails の E2E テスト、ずっと Capybara + Poltergeist (PhantomJS)でやろうとしてたけど結局うまくいかなかった。

つらいポイントいろいろあって、 SSL 通信が必要なアクションでリダイレクトが発生してうまく動かないとか、 RSpec の use_transactional_fixtures オプションが利用できなくなるため Database Cleaner とか使う必要あったりとか、Parallel Test するときだけ通らないテストケースあったりとか、高速なマシンを使うときだけ落ちる、 Jenkins でだけ落ちる、といった問題が出てきたりする。

この手の問題、 sleep を入れたりとか mutex 化したりとか場当たり的な対応でテスト通すようにできることはできるけど、 unit テストのようにずーっと通る状態を維持し続けることが難しい(上に書いたように特定の端末でだけ落ちたりする)。おまけに何をやっても RackTest を使う場合に比べてテストが遅くなる。 Pull Request ビルダーでテストが実行し終わるまでに 15 分とかかかったりする。良くない。

かといって JavaScript のテスト書かない訳にはいかない。 JavaScript いっぱい使っててテストがないのはやっぱり不安が大きい。結局、JavaScript のコードを DOM べったりな状態から切り離して、サーバーサイドの Rails アプリケーションの挙動は request spec なり controller spec なりでテストして、 JavaScript のテストは JavaScript で行うのが良いような気がした。どうしてもエンドツーエンドテストやりたかったら Selenium 使うしかない気がする。これはスピードはあきらめて、 Pull Request ビルダーとかでビルドするときはテストやらずに、 master ブランチの定期ビルドとかでぶっ壊れてないか試す、みたいな方法が良いと思う。

もうこれ以上、エクセルにスクリーンショット貼り続ける訳にはいかないんだ。

| @Mac/iPhone

面白かったので便乗して書きます。

iPod 、大学3年の頃に友達が買って見せびらかしてまわってたのが最初の出会いだった。当時は自分は Windows 使ってて Apple 周辺の事情に疎く、特に iPod を欲しいとも思わなかった。

初めて iPod を買ったのは就職活動に失敗して留年していた頃だ。家の近所をぶらついていて、確か発売されたばかりで結構品薄だったのを偶然発見し、就職活動が終わって始めた居酒屋のバイトでもらった初めての給料で買った。第四世代 iPod のモノクロのやつで、ディスクの容量は 20GB だった。

iPod を買った年の冬に精巣腫瘍になって翌年の正月に病院に行ってがんだと分かり入院・手術した。病院はおそろしく退屈で病人生活を始めた最初の頃はパソコンとか持ち込んだりしてなくて、 iPod で音楽を聴くか新聞を読むくらいしか楽しみがなかった。抗がん剤の治療をするようになってからは、点滴されながらじっと iPod で音楽聞いてた。音楽聞いて抗がん剤の吐き気とかを紛らわせようとしてた。

第四世代 iPod は Apple タイマーが正常に機能して、購入からぴったり一年後に壊れてしまった。 HDD が死んだぽかったので開腹してハードディスク入れ替えたら良さそうだったけど当時はハードディスクもそこそこ高く、海外に旅行に行く直前に(飛行機に10時間以上乗るのに無音はつらかったので)第五世代の iPod を買った。こちらは 30GB のディスク容量で、カラー液晶になっていて写真を閲覧したりもできた。

第五世代 iPod は京都で半年入院してるときに重宝した。この頃は抗がん剤の副作用で耳鳴り・高音難聴に苦しんでいたのでよく音楽を聞いた。あと当時付き合っていた女性にふられたのでコールドプレイの "Warning Sign" をエンドレスリピートしながら京都の寺社仏閣を一人でふらふらと歩いて回ったりした。退院して北海道まで青春18きっぷで行ったときもひたすら第五世代 iPod で音楽を聞いていた。

第五世代 iPod は液晶から壊れはじめた。縦方向に筋が入るようになり、最終的には筋が広がって筋の隙間からのぞき見るようにして画面を見る必要があった。iPhone 3G を買ってからは歩くときは iPhone で音楽聞くようになったので、 iPod はもっぱら車の中で音楽聞くとき専用端末になった。最後はオートバックスの駐車場でドアポケットの掃除かなんかしてるときになくしてしまったっぽくて行方不明になった。

実は最初にインターネットに接続したパソコンは弟が音楽製作用に買っていた初代 iMac のタンジェリンのやつで、パソコンの原体験は Apple にあった。大学ではレポート提出とかの都合上 Windows を使っていたけど、数年ぶりに Apple 製品に触れて再び Apple 熱が高まり、 AirMac Express を買って Air Tunes で音楽聞くようになった。

iPod が画期的だったのは、 iTunes のライブラリと iPod を同期して使うところだった。それまでの MD や既存の mp3 プレーヤーは、プレーヤーに入れたい曲を選択してプレーヤーに移す、という作業が必要だった。昔の iPod の CM に、家の Mac で聞いていた音楽の続きを出かけるときに iPod で聞く、というやつがあったけど、そういう発想は他のプレーヤーにはなかったと思う。最初は馴染めなかったけど、曲のレートや再生回数が iPod と iTunes で同期される便利さに慣れると、 iPod 大勝利だなと思うようになった。2ちゃんねるで SONY のプレーヤーの悪口を吹聴して回るほどだった。

しばらく Apple 製品使ってないうちに OS X が出ていることを知り、 OS X の GUI の美しさにびっくりした。当時の Windows XP のフォントはアンチエイリアスがきいておらずシャギーだった。 OS X といい、 iPod - iTunes といい、 Mac/Apple の方が Windows/Microsft よりもだいぶ進んでいるなと感じた。 Windows に無理矢理 Osaka フォント入れたりして Mac 化したりしてた。次パソコン買うなら絶対 Mac だなと思うようになっていた。

大学卒業して入院しているときには病院があまりにも暇でノートパソコンが欲しくなったので、 DELL の安いノートとかにしたらと母親に言われたものの、どうしても Mac がいいとだだをこねて PowerBook G4 の 17 インチのやつを買ってもらった。これを使って病院でブログ書いたりしてた。ブログいじりが楽しくて PHP とか少し触るようになり( Mac は簡単にウェブサーバーを立てることができるので病院とかでも PHP のコードいじったりするのに向いてた)、結果的に Web の仕事がしたいと思うようになって今日に至っているような気がするので、 iPod 買ってなかったら Mac を欲しいとも思わなくてプログラミングをやり始めることもなく、何の能力を身につけることもないまま今も親のすねをかじってニートをしていたかもしれない。

| @技術/プログラミング

Rails のログファイルを tail -f で見たいんだけど余計なものはフィルタリングして表示されないようにしたかった。最初は以下のようにしてみた。

⚡ tail -f log/development.log | grep -v -e ‘asset|Cache|Rendered’

これだと条件にマッチする行は表示されなくなるけど改行が削除されずに空行がたくさん表示される。これでは見やすいとは言えない。以下のように sed で空行を削除するようにしてみた。

⚡ tail -f log/development.log | grep -v -e ‘asset|Cache|Rendered’ | sed -e ‘/^$/d’

しかしこうすると必要な情報まで表示されなくなってしまう。 tail ではなく cat とかでやると望んだ通りになる。 tail -> grep -> sed の流れだとうまくいかないぽかった。

“tail grep sed” でググったら以下のような記事を発見したので試しに grep に —line-buffered オプションを渡してみた。

⚡ tail -f log/development.log | grep -v -e 'asset|Cache|Rendered' --line-buffered | sed -e '/^$/d'

これで望んだ通りの出力になった。便利。

| @労働

rebuild.fm でたびたび HipChat とか IRC の話がある。最近は Slack というサービスが流行っているらしい(Rebuild: 54: Email Will Never Die (naan, N))。ウェブ開発者じゃない人の間にも広まってる感じなのかな。自分はいまの会社に入って初めて IRC に触れて便利だなぁと感動したし、もう IRC のようなチャットシステムがない会社で働くのは無理だなぁという感じがする。

これまで働いてきた会社の情報共有手段を振り返ってみる。

最初に就職して三日で辞めた会社

数人しかいない会社。なんかよくわからない P2P のメッセンジャーだった。一対一でしか情報やりとりできない。 URL の共有とかファイル共有に使ってた。口頭での情報共有がメイン。

二番目に勤めた地元のホームページ制作会社

10人くらいしかいない会社。 Yahoo! メッセンジャーだった。グループチャットとかできたのかもしれないけど一対一でしか使ってなかった。使い方は同じように URL とファイル共有だった。口頭での情報共有がメイン。

三番目に勤めた福岡のウェブ制作会社

社員数は70人くらいで東京やベトナムの社員とも協働することが多かった。基本的に ML でやりとりして、チャットは MS の Communicator とかいうやつだった。 Active Directory なやつ。グループチャットとかあったけど基本的に一対一で情報やりとりしてた。この会社くらいの規模から口頭での情報共有が厳しくなってくる。

現在の職場

社員数300人くらいで、 IRC でやりとりしてる。チームによっては Skype 使ってるところもあるけど、基本的には IRC 。 IRC の良いところは、話しかけることで会話が始まるのではなく、チャンネルがあってそこに人が入っていく感じ。たまり場感ある。大学生の頃サークルやってなかったからちょっと違うかもしれないけど、サークルのたまり場に似てるんじゃないかという感じがする。 IRC に接続すると誰かいてなんか返事が返ってくる感じがいい。

あと ZNC などの IRC バウンサー使うと自分が接続していなかった間のログも読めて良い。 Skype のチャットにもこういう機能あるけど、 Skype はグループを作ったりとか人との会話とかで、人と人のチャットに主眼が置かれる。 IRC はトピックごとに場所がある感じ。

社員全体へのお知らせとか #all チャンネルとか #fukuoka チャンネルに書かれるけど非同期に読めるのが良い。 MS の Communicator とかはその場ですぐ来たメッセージ読んで返事しないとちっこんちっこんアイコンが光ったりしてうざい。というか一対一の会話ツールは非同期コミュニケーションしづらい。 IRC だと手が空いたときにまとめて読んだりできるので良い。

あと IRC は Ikachan とか Hubot とか bot にいろいろやらせられるのがよい。 Jenkins のビルドが走ったら IRC に通知する、デプロイが始まったら IRC に通知する、 Hubot にデプロイをやらせる、 GitHub の Issue にコメントがあったら IRC に通知するなどなど。

三番目の会社は各人が情報にアクセスできるレベルが Active Direcotry で管理されてて必要な情報を必要な時に得ることが難しかった。 IRC でも選ばれたメンバーしか入れないチャンネルとか作ることもできるけど基本的に本人がこの情報欲しいと思ったときにそのチャンネルに入って情報を得ることができて効率が良いと感じた。

もっと多くの人が IRC とかチャット使って仕事して欲しい

IRC はずっと前からある技術だけどいまでも便利な情報共有手段だし何でもっと多くの会社で使われないんだろうという感じがある。小さな会社じゃ自前で IRC サーバーたてるのとかしんどい感じあるしある程度技術者がいて運用スキルがある会社じゃないと使えないのかも知れない。いまは HipChat とか Slack とかあって IRC サーバーたてなくても良いし ZNC とかの使い方がわからなくても過去ログ追えたりするわけだし、ウェブ開発者がうようよいるような会社じゃなくても便利なチャット使えるのだからもっといろんな会社に広がるといいと思う。自分がいまの会社に入ったときに感じた情報源の広がり感をもっと多くの人に味わってもらえると日本社会もっと良くなる気がする。

| @技術/プログラミング

隔週木曜日にグルーヴノーツ社と会場を交代交代で Fukuoka.rb やってたんだけど、8/21 の回がたまたま Fukuoka.go と重なってしまって、Fukuoka.go は同僚でプラチナサーチャーでいけすかない有名な @monochromegane さんが主宰しててペパボ開催だったし、 Fukuoka.rb 重鎮の @nagachika さんが Fukuoka.go に参加登録してたので、どうせならということで Fukuoka.go と Fukuoka.rb 共催することになった。

なんか LT できるっぽい感じだったので大して技術力もないくせに LT させてもらった。他の人のハイレベルな話が続いた後に、本当に Lightening な感じですぐ終わるトークをやらせてもらった。新卒研修のときのスライドの内容をベースに gyowitter のご紹介をさせてもらった。

ただ社外の人も来る勉強会で話できたのは良い経験になった。もうちょっとネタよりから技術的にも意味がある内容の発表をできるようになりたいなぁ。

合同勉強会、普段見かけない人とかも来て良い感じなのでたまにできるといいなぁと思った。あと今回懇親会とか企画されてなかったので次は懇親会もあると良さそう。

| @労働

新卒研修の一環で、若者向けにおっさんエンジニアが座学をするという取り組みが会社にあって、自分も担当したので資料を公開します。自分は技術力低くて技術的に有益な話はできないと思ったので奇行に走ってポエムを吟じた。

うちの会社、技術基盤チームの面々がすごく熱心に教育するし前年に新卒で入った若者たちも研修に絡んで斧を投げてくるので新卒で入ると大変便利なのではと感じる。業務として Rails チュートリアルやらせてくれる会社とかあんまないと思うし、おっさんエンジニアによる座学とかもあって、自分のようなポエムから Go 言語の話とか AWS やらインフラの話まで聞ける。技術的に有名な会社とかだと新卒入社時からエンジニアとしての高い能力が求められたりするのではないかと思うけど、うちの会社は雑魚キャラでも入ってから育てる的な環境がある気がするので、当初は Visual Studio でしかコード書いたことないしコードのインデントは Tab とスペースが入り乱れ、そもそもインデントがおかしい、みたいな状態の若者でも研修後には割とまともになってて一年後には Emacs でバリバリコード書いて何食わぬ顔で新サービスリリースしてたりする。なので今は雑魚キャラだけど成り上がってやりたいという方にもおすすめです。

こちらからは以上です。

| @技術/プログラミング

Go 言語でなにかやってみようと思っていたところ、先々週末くらいにアンチポップさんが gyo という、 Go 言語で Yo するやつを作ってたので、 gyo とそのサンプルコードを利用して gyowitter というのを作った。 Yo の MORYGONZALEZ が Yo を受け取ったら Yo を返しつつ Twitter に「また @wyinoue さんから Yo がありました。この人仕事してるんですかね?」とか Post するやつ。一部の異常者から10連続で Yo とか来て軽くうざいと思うことがあったので、 Twitter のこの人こんなに Yo してきて異常者ですよ、というのを知らしめたくて作った。

Go 言語、初めて書いてみたけど簡単なことしかしてないので大した感想述べられるほどは分からない。 JSON で設定ファイル書いてその内容を読み込む対応を昨日今日くらいでやってたんだけど、静的型付けなためか、読もうとする JSON がどういう構造になってるかを分かってないといけなくて、 Ruby とかだととりあえず parse したあと Hash にして好きに扱える感じだけど、読み込む前にどの階層のなんという key のバリューが map になってるとか配列になってるとか分かってないといけないのが窮屈に感じた。

コンパイルしたらバイナリが一つ出来てそれを置けばデプロイ完了(環境構築とかいらない)のは大変便利だと思った。 Mac で書いて Linux 用にクロスコンパイルして scp してデプロイ完了(Linux 側には Go インストールする必要ない)というのはスクリプト言語にはない感じなので新鮮だった。

ただビルドしたバイナリのサイズが結構でかくて、 gyowitter は大したことしてないけど 6MB くらいあって、細い回線でアップロードしようとすると結構つらい。

percol 流行ったときに会社で使ってる 3 年前の MacBook Pro (HDD のやつ)に入れて使ってみたらあまりにもレスポンス悪くて使うの諦めてたんだけど、 Go 言語版の peco を使い始めたら普通に使えて快適だったので、 Go 言語には夢がひろがりんぐな印象を持ってる。新しい言語勉強するの新鮮で頭が若返りするような感覚あるので引き続き勉強してみようと思います。