散髪ログ

前回は2/14だったので3ヶ月くらい。ちょうど1年前も行っていたらしい。

LINE DEVELOPER CONFERENCE 2015に参加してきました

昨年は参加できなかったのですが、今年は見事抽選に通ったので参加してきました。

午前中は全体のアーキテクチャやエンジニアの文化の話、午後は2トラックで各技術要素についての詳細というかんじでとてもバランスがよく、かつそれだけのトピックについて自信を持って話せる人がいるというのは素晴しいなと感じました。

途中でどうしても抜けないといけない用事があったので、聞いたセッションだけざっくりと感想を。

LINE Platform Development Chronicle

サーバサイドのアーキテクチャがどう変わってきたかという話で、LINEの成長に合わせて、適切な技術を新旧問わず選択してきているという印象を受けました。

ゲートウェイサーバの実装をnginxの拡張モジュールからErlangに変更することでダウンタイム無しでコードのアップデートを実現した話や、SPDYの採用、サービス間の連携にThriftやprotbufを利用している点など、今のLINEを支えている技術基盤がなぜそうなっているのかというところが納得できて面白かったです。

HBaseとRedisを使った100億超/日メッセージを処理するLINEのストレージ

とにかくスケールがでかくてすごい。

数十ペタバイトのデータを管理するために、HBaseとRedisを組み合わせたストレージを設計し、それを抽象化するStorage APIを提供しているとのこと。

直近ではそんな規模のデータを扱う機会はないんですが、一つのオプションとして知っていると非常に役立ちそうな話で勉強になりました。

そんな規模のHBaseのバージョンアップを検討しているとのことで、応援すると共に来年、再来年にその話が聞けるのを楽しみにしています。

4年に渡る LINE Android アプリの進化とチャレンジ

星の数ほどあるAndroid端末ですが、できるだけ多くの端末で快適にLINEが使えるように、ハードウェアの情報を取得してそれにあわせてエフェクトや機能のオンオフを切り替えていたり、GCMが使えない端末のために通知プラットフォームを自作した話など、メッセージングサービスだからこそ重要なポイントをしっかり解決できているのはすごいなと思いました。

また、エラーを集約するためのプラットフォーム、めっちゃくちゃ便利そうなので参考にしたいです。

座談会 & 懇親会

ご挨拶したかった人と軽くお話できたし、懇親会は同じテーブルの人といろいろ話せましたし、ちょっとだけLINEのインフラについて聞けたのでとても有意義でした。(食事もたっぷりで満足でした!)

おわりに

来年もあったら是非いきたいな、と思う素晴しいカンファレンスでした。LINEの皆さんありがとうございました。

第1回ペパボテックカンファレンスで見積りと計画づくりについて発表しました

(当日の様子や、なぜこのようなイベントが開催されたのかはCTOのエントリ 第1回ペパボテックカンファレンスを開催しました #pbtech - delirious thoughts をご覧ください。)

ペパボテックカンファレンスという企画が立ち上がったとき、最近ずっとスピリチュアルなことばっかりやってるし、テッキーなことはまだ発表できるほど成果だせてないし、という思いがあって登壇を保留していました。(普段外に出ない人に発表してほしいというコンセプトもあり)

ただ、社内でも「見積りと計画づくり」について何度か説明しており、参考文献にあげたような書籍を全部読まなくても概要を理解できるような資料の必要性を感じていたので、自分の考えていることを技術という切り口で言語化してみるといいかもしれないと思い、今回発表させていただきました。

現実社会の厳しさと戦っている皆さんのヒントになれば幸いです。

さて、実はスライドからは時間の都合上いくつか省いた箇所がありまして折角なので補足しておきます。

規模を見積もり期間を導出するという基本の話

相対規模見積りのポイントが時間見積りになってしまっている場合があります。

本人達がそれを把握している場合はまだよいのですが、もし無意識に見積りをするときに時間換算しているようでしたら、それは無駄なので思いきって(理想|現実)時間で見積もるのがよいのではないでしょうか。

規模見積りは「規模を見積もって期間を導出する」ことで、見積りや計画作りにかかるコストを軽減しつつ、だいたいあってる計画をたてるのに非常に役立ちます。それはスライド中にあるような、不確定要素の多い中で、必要十分な見積りと計画づくりをするためのテクニックの一つです。

もし時間見積りで妥当な時間を見積れるような成熟したチーム、プロダクトであれば、時間の見積りをするのがよいのではないでしょうか。

ベロシティの考え方と、初期の想定ベロシティの合意について

発表では、突然ベロシティという言葉を使ってしまって「しまったな」と思っていたのでここで簡単に補足します。

ベロシティとは、上で話したような「規模を見積もって期間を導出する」ために必要な、1イテレーション(スプリント)あたりに消化するポイント数です。

ベロシティは扱いが非常に難しい物と感じていて、多くの場合これがコミットメントになってしまい、開発チームが身動きがとれなくなってしまうことがあります。

そこで一つのアイデアとして考えているのは

  • POやマネージャにはベロシティは安定させるのが大事という説明をする
    • ベロシティが安定しないと計画がたてられない
  • 開発チームにはどうやったらベロシティが上がるのか考えてもらう
    • 課題を見つけ解決していく姿勢

という二枚舌作戦です。

AEP読書会でも、ベロシティの扱いについてディスカッションがあったのですが、その際も「ベロシティはチームのパワーの限界近くまでは上がるが、無限に上昇するものではない」という話がでていました。

このあたりを上手く説明できると、お互いやりやすいと思うので、みなさんどうやっているのか知見を共有しましょう!

また、もう一つ問題になるのが、開発に入る前、入った直後の想定ベロシティをどう置くかという問題です。

これもまたよく揉めるところだと感じていて、ハッピーケースとしては「ベロシティは2-4イテレーション程度見てから決めましょう」という感じにできるとよいのですが、1週間イテレーションだとしても半月から1ヶ月かかるので、その間リリース計画は立てられませんとなる困りますよね。

チームメンバーがお互いの能力をよく知っていれば、大体の想定ベロシティを考えることはできるのですが、そういうケースばかりでもないので難しいです。ここも知見を共有しましょう!

2種類のバッファ

バッファには

  • フィーチャバッファ
  • スケジュールバッファ

の2種類があります。フィーチャバッファについては、優先順位付けができればそれで終わりなので、ここでは、スケジュールバッファについて考えます。

基本的には、スケジュールバッファはPOや事業マネージャが用意するべきで、個々のストーリーに詰まなくてもいいような関係作りが大事ではないと考えています。

もちろん、技術的難易度が高いフィーチャについて、合意の上でバッファを取るのは大切ですが、そういう例外を除いて基本方針としてはフィーチャの見積りにバッファを積まないほうが、スケジュールを考える上では有用ではないでしょうか。

見積りや計画づくりがいらない組織

当然見積りや計画づくりはタダじゃないので、目的を持って行おうというのは発表でも述べましたし、資料にも含まれています。

では、見積りや計画づくりが不要なチームや組織は存在するのでしょうか?

私は見たことないですが、どこかにはあるんじゃないかなとは思います。もしそういう組織を知ってる方がいらっしゃいましたらぜひ教えてください!

おわりに

というわけで、みなさん充実した見積りと計画づくりを!

Comeback Japan 2015というイベントで発表してきました

Comeback Japan 2015 ~日本のアジャイルを応援しよう~ - Comeback Japan ~日本のアジャイルを応援しよう~ | Doorkeeper というイベントが急遽行われるという話を聞き、せっかくなのでということで発表してきました。

発表内容と資料はペパボテックカンファレンスのエントリを参照ください。

参加者のみなさんからいろいろのフィードバックをいただき、そのおかげで本番(テックカンファレンス)も上手くいきました。ありがとうございました。

発表後は某社の方と某インフラについてもりあがったり、スクラムやってるんですよーという話を聞いたり、とても有意義な時間でした。

時間の都合上最後までいれなかったのですが、企画してくださった方々、会場のリクルートマーケティングパートナーズさん(めっちゃお洒落な会場でびっくりしました)ありがとうございました!

CoreOS Meetup Tokyo

CoreOSの機運が高まってきたので CoreOS Meetup Tokyo #1 - connpass に参加して知見をいただいてきました。

プロダクション運用しているところの話は非常に面白かったのと、Checkpoint/Restore の話は「あっこれコンテナ仮想化勉強会で聞いたやつだ!」みたいな感じで、このあたりの技術が少しずつ自分の中で繋ってきた感ができた気がします。

社内では、とあるOpenStack環境でCoreOSのインスタンスをバンバン立ち上げられるようになったので、バンバン使って知見を貯めるぞ、という気持ちが高まっております。

新入社員

おっさんからいろいろ言われたりするだろうけどそんなことどうでもいいので「おっさん向け最新のオススメ論文10選」みたいなエントリを社内SNSでもいいので書いてください。お願いします。

エレクトーンの発表会と幼稚園開始

4日(土)に息子のエレクトーンの発表会があったので行ってきました。一年間飽きもせず楽しめたようなのでよかったよかった。

近くのいくつかの教室で合同の発表会で、ジュニアドラムの子とかもいてなかなかよかったのですが、席の位置取りをミスって正面から写真がとれなかったのが残念。

あとは、今日から幼稚園だったので、また一年無事に通ってくれる嬉しいなと思っております。あと1年で小学生とか、月日が流れる速度が上っているとしか思えない…

2015/03に読み終えた本

4冊。うち一冊がぞい。さみしい。

shucreamの本棚 - 2015年03月 (4作品)
OpenStackクラウドインテグレーション オープンソースクラウドによるサービス構築入門
日本OpenStackユーザ会
読了日:03月12日
評価4

スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス (WEB+DB PRESS plus)
貝瀬岳志
読了日:03月19日
評価5

WEB+DB PRESS Vol.85
菅原元気
読了日:03月24日

NEW GAME! (2) (まんがタイムKRコミックス)
得能正太郎
読了日:03月29日
評価5

powered by booklog

今年度もお疲れ様でしたの会(ミーティング現状確認会)でLTをしてきました

ミーティング現状確認会あらため 今年度もお疲れ様でしたの会 on Zusaar で議事録についてLTしてきました。

もしかしたらストロングスタイルの会かもしれないと出発直前にがっと書いたのですが、参加者の皆さんには納得していただけたようでなによりでした。

あとは、フルーティーなベルギー発泡酒がめちゃくちゃおいしかったです。ありがとうございました!

なんとかフラグと履歴データについての雑な考え方

お仕事でも丁度タイムリーな話題だったので、「何とかフラグが欲しい」と言われたときに自分が考えていることをまとめておきます。

私のポジションとしては「DB設計をちゃんとやろうと思っているものの現実に流されてしまうゆるふわRailsエンジニア」あたりです。

Q. 変更される回数はどれくらいか
    - 一方通行で一回だけ
        Q. 付随する状況があるか(e.g. 退会理由)
            - ある -> イベントテーブル作成
            - ない -> 時刻カラム追加
    - 何回もトグルする
        Q. 付随する情報があるか
            - ある -> イベントテーブル作成
            - ない
                Q. 変更される時刻に意味があるか
                  - ある
                    Q. DB上である時点の状態を再現できる必要があるか
                        - ある -> イベントテーブル作成
                        - ない -> ログでがんばる
                  - ない -> booleanカラム追加

このあたりの要件をヒアリングするなり決めてしまうなりして、妥当なところに落しています。

一番しんどいのが「何回もトグルする上に特定の時点をDB上で再現させないといけないケース」なんですが、幸いにもこのケースにはあまり出会ったことがないのはゆるふわだからですかね。

あんちぽ派決起集会

CTOに就任したあんちぽさんを囲んで決起集会が開催された。

今年も1/4が終わってしまう事実を受け止めつつがんばるぞい。

スクラム実践入門を読みました

本日発売された「スクラム実践入門」という本をさっそく買ってざっと目を通しました。

タイトルに違わず、スクラムを実践するための入門書として、とてもよい内容だなと感じました。

ソフトウェア開発の難しさに正面から向き合う

1章では、スクラムやアジャイル開発に限らない「ソフトウェア開発そのものが難しさ」を明かにし、その難しさにどう立ち向かっていくのか、スクラムは何を手助け、解決してくれるのかを簡潔に説明してくれます。

2章から4章では、スクラムガイドで書かれている各要素を詳しく紹介してくれています。ここの説明は、スクラムでなくても実際にアジャイル開発を実践している人からすると、非常に簡潔に、必要十分な量の説明になっていると感じるのではないでしょうか。まさに実践の入門という感じがしました。

新しい発見もあって、本書を読むまではスクラムチームのそれぞれが責任について、私は以下のように考えていました。

  • 何をどういう順番で作るかに責任を持つプロダクトオーナー
  • プロセスの改善に責任をもつスクラムマスター
  • プロダクトをどう作るかに責任をもつ開発チーム

しかし、一つ視点を上げると「プロダクトをどう作るか」というのは「どういうプロセスで作るか」ということになり、そこに責任を持つのはスクラムマスターだと考えられることができるんですね。

一方で、そう考えることで開発チームにあたるスポットライトが(ただでさえチームという表現で弱くなっているところ)さらに弱くなってしまっているように感じるのはちょっと残念だなと思いました。

赤裸々な失敗談

6章から8章では、他のスクラム本では絶対に読めないであろうコンテンツですね。GMOペパボ、mixi、DeNAでのスクラム導入を初期から振り返って、実際におきた問題やそれに対する対応、結果どうなったかというのを著者の方々の視点から書かれています。

3社の中では、DeNAの大規模スクラムの事例が一番興味深かったのですが、業務委託契約の話については前職のこともありいろいろ思うところが(ここで日記は途切れている

パターンとFAQ

5章と9章以降は、スクラムというフレームワークにどういう具をつめるか、その具をどうやってよりよいものにしていくかという、スクラムマスターの入門書というふうに読みました。

スクラムガイドを読んで「どこからどこまでがスクラムなのか」その枠がぼんやりと見えてきた人が、いざ実践するときにそのフレームワークにどういうプラクティスを詰めるのか、そのヒントがたくさんあるように思いました。

一押しは10章の「スクラムチームでよくある問題と解決策」ですね。どれも本当にあるあるですし、一度解決したつもりでも、メンバーやPOの交代など状況の変化で再発しやすい問題が盛り沢山でした。

6章から8章の事例も含めて、こういうFAQのようなものを知ってるだけでも緊急時に落ち着いて行動できるようになるはずなので、これからやってみようという人は必読ですね。

とりあえず読みましょう

タイトルの通り、これからスクラムを実践してみようという人は必読の内容です。 また、スクラムに興味ない人でも、ソフトウェア開発を今よりもう少しうまくやるためのヒントにはなるのではないかと思います。

みなさんだまって読みましょう。

電子書籍は スクラム実践入門 ── 成果を生み出すアジャイルな開発プロセス | Gihyo Digital Publishing からどうぞ。

「30分(くらい)でわかるGit」という勉強会をしました

社内のデザイナーさんから、Gitのmergeとかrebaseがよくわからないという話を聞いて、折角なので資料を作って勉強会を開催しました。

今回も 自分がGitを理解できたなーと思えたきっかけである「全てはコミットである」 という持論を押し付けていく形になっていますが、mergeやrebaseを理解して使っていくためのはやっぱりこれが必要だと思うんですよね。

資料の内容は、なるべく わかりやすさのために正確性を犠牲にしない ように心掛けたつもりですが、無理のある説明になっているところもあるかもしれません。

発表でだいたい30分、質疑や議論含めて45分程度で終われたので、参加者の方々は30分くらいでGitがわかるようになったと信じています!

SUZURIのAPI ClientをHeroicsで生成しました

Ruby Business User Conference で JSON Hyper-Schema についてLT をしたのも半月前のこと、ついにSUZURI Developer CenterでAPIとJSON Schemaが公開されました。

折角なので、interagent/heroicsを使ってクライアントライブラリを生成してみました。

kenchan/suzuri_client

いざ生成してみると、ちょっとおかしいなと思うインタフェースがいくつかあるので原因を調べときます。

あとは、HeroicsはHTTPクライアントライブラリとしてexconを使っているのですが、手元の環境だとうまくSSLの証明書が読み込めないっぽく、exconのREADMEにあるように証明書を自分で設定しないとHTTPSで接続できませんでした。(それかExcon.defaults[:ssl_verify_peer] = falseをする)

そんなこんなでちょっと変なところもあるんですが、これも一つの試みということで。

あわせて読みたい: ワンクリックでインターネットをTシャツにアーカイブれるGoogle chrome拡張作った。 - パルカワ2

通販生活

数日前、たまたまコナミスタイルのポイント失効メールがきたので見に行ったら、IIDX 22のサントラが出るということを知り、特典を確認し、ポスターは不要なのでAmazonで注文しました。もう何年もやってないんですけど、奥さんが現役なのとなんとなく流れで今でも買ってしまうのでした。

konozamaせずに無事発売日に届いたので一安心。

2015/02に読み終えた本

今月は2冊。ひどい。

Ruby Business User Conference で JSON Hyper-Schema についてLTしました

Ruby Business Users Conference 2015 で JSON Hyper-Schema についてLTしてきました。

同じ内容でCFPを出したら落ちてしまったのですが、当日の内容を見るに妥当な結果だったなという感じです。

Ruby Associationのイベントはほぼ初参加だったのですが、いわゆる界隈の人とはまた違った人達が集まっているので、これはこれで面白いなぁと思いながら参加していました。

資料については少し直したいところがあったのですが、.keyファイルが壊れてしまって画像が全て消失したので、発表前にexportしたPDFをそのまま上げました。

補足しておくと、

  • json_schema gem はちょっと微妙なので json-schema を使ってるやつを選んだほうがいいよ
    • そして interpol は json_schema なので…

というくらいです。

IDLからの自動生成は人類の夢なので、もうちょっとこの夢をおいかけようかな、と思っているのでした。

テレビ効果ってすごいなって話

先週から ハンドメイドマーケット minne(ミンネ) のテレビCMがはじまったり、有吉反省会でビリギャルのパッケージの人が本人じゃないことを知り、そのあと事務所のサイトが落ちているのを確認して、テレビ効果ってすごいなーと思った日曜の夜でした。

明日から1週間がんばるぞい。

デブサミ2015にちょっとだけ参加しました

Developers Summit 2015 の Agile TED に同僚のかしめぐさんが登壇するとのことで、応援にいってきました。

身内補正込みだと一番よかったんじゃないかと思いました!掴みも内容もすばらしかった!

後半が社内で練習したときとけっこう変わって、ぐっと良くなっていたのでびっくりしながら聞いていました。

デブサミについての思い出

2012年のWeb日記 で書きましたが、自分にとってはデブサミは思い入れのあるイベントで、参加するたびにあの頃の平鍋さんや角谷さんと今の自分を比べて、もっとがんばろうという気持ちになるのでした。

今年は勝負の年だぞー

フライパンとmagsafe2コンバータを書いました

家のフライパンが痛んできたので、奥さんが気にいっていた北陸アルミのフライパンを買いました。

今使っていたのは結構長いこともったので、これも長く使えるといいなー。

あとは、毎日PCとアダプタを持ってかえっていたのですが、部屋を見まわしたら文鎮化しているMacBookPro(mid2009)があったのでmagsafe2コンバータを購入してQoLを向上させました。荷物が軽くなってめっちゃ快適です。AmazonよりApple Storeのほうが安かったのでこちらで。

MagSafe - MagSafe 2コンバータ - Apple Store(日本)

第6回 コンテナ型仮想化の情報交換会@東京 に参加してきました

昔LXCで遊んでいたことあるんですが、最近Dockerを本格的にいじりはじめてから、このあたりの知識の足りなさを感じていたので、最近のナウいトピックを知りたいと思って参加してきました。

というかんじなので、理解できていない、間違っている部分が多々あるかと思いますので、ここ違うんじゃない?というところがある方はぜひ下のコメント欄でも、ブコメでもいいので教えていただけると喜びます。

資料などは 第6回 コンテナ型仮想化の情報交換会@東京 - connpass からどうぞ。

Cluster Schedulerの紹介

GoogleのOmega(OSSではない)というCluster Schedulerの論文を中心に、Cluster Scheduler の分類と歴史、Googleがなぜ新しいスケジューラを開発しているのか、その問題意識などをまとめたという感じでしょうか。Cluster Schedulerってなんぞ?というところからでしたが、なんとなくわかった気になれる内容でした。

クラスタリングスケジューラが管理するジョブの種類はバッチジョブとサービスジョブがあって、Googleの場合だと

  • 割合からするとバッチジョブが全体の80%
  • リソース面ではサービスジョブが全体の50-80%を利用する

というような状況らしく、これらをより効率よくスケジューリングするために新しいスケジューラを開発しているとのこと。ジョブの特性を考慮してスケジューリンするような仕組みが、既存のものでは実現できないという風に読んだのですがあってますかね…

Debian GNU/kFreeBSDにおけるJail構築を試してみた

Debian/kFreeBSD という FreeBSDカーネルの上で動くDebianでJail環境を構築してみたという話。

debootstrap という最小のディレクトリツリーをダウンロードできる便利コマンドを知れたし、それはDockerでも使ってるんだよーというTwitterを見てんなるほどーという感じでした。

で、Debian/kFreeBSD でJail環境を作るメリットとしては、

  • カーネルがFreeBSDなのでFreeBSDのコンテナが動く
  • もちろんDebianも動く
  • Crossdebootstrapでクロスコンパイル環境を作ることもできる

というあたりらしいです。なるほどー。

今日から触れる Solaris Zones 入門

Solarisと言えば、大学の教授が「サーバと言えばSolarisでしょ」と言い初めてSPARCマシンを突然購入して押し付けられたけど何もできずに、数週間後にLenovoのサーバを買ってもらってDebianを入れていた記憶が思い出されます。

それはそれとして、SolarisにもZoneというコンテナ技術があって、オラクルのサイトからVirtualBoxのVMをダウンロードすればなんと無料で試すことができます。

リソース管理機能を使ってコンテナにも関わらず物理CPUをわりあてたりできるとのこと。

Solarisは、ものすごく古いバージョンでコンパイルしたバイナリも新しいOSでちゃんと動くそうで、そういう古いバイナリの実行環境を隔離するためにZoneが使われたりするらしいです。

OpenVZ Update

個人的なベストトークでした。

https://stats.openvz.org にOpenVZを使っているユーザの統計情報があつまっていて、これは自動で送られるようになってるんですかね?Gentooが4位というのがびっくりしました。

OpenVZはオープンソースだったものの、実際はParalles Clound Serversからのバックポートが多くて、関係者以外はコントリビュートしにくい状況だったそうです。それを一変させようと、OpenVZのソースコードとPCSのソースコード(の一部)をマージして公開するよ宣言があったとのこと。

PCSは3つのモジュールから構成されるんですが、その中のストレージ部分は商用アドオンのまま、他の部分はほぼマージするそうで、大胆な戦略だなーと思いました。

で、マージされる部分にはコンテナとハイパーバイザの両方を透過的に扱うための仕組みも含まれるそうで、数週間前にはOpenVZ上でDockerコンテナが動いたとのこと。

さらにOpenVZのlibctとlibcontainerが統合されることがDockerConで発表されていて、それによってDockerはCRIUが利用できるようになり、OpenVZはDockerコンテナが動くようになるというメリットがあるそうです。(CRUIについてはあとのLTで)

スライドの18枚目が衝撃で、libcontainerがカーネルとコンテナの間を橋渡しするので、lxcもDockerもvzctlもできるようになる、と。

ただ、まだマージは今がんばってやってるところなので乞御期待。

LXC Update

LXC 1.1ではCRUI(まだでた!)よる新機能が入ったのと、initにsystemdが使えるようになったとのこと。

ほかには、LXDというREST APIの受け口ができて、LXCコマンドでリモートのコンテナも操作できるようになったそうです。

LT3本

Amazon ECS

まだプレビュー版なので、申請してしばらく待つと使えるようになるそうです。

試してみた系の記事がいくつかあるから、それをやってみて雰囲気を掴んでみるのよさそうとのこと。

ノートPCにOpenStack

Ubuntu OpenStack Installerを使えばスペックさえあればノートPCでOpenStackが!

プロビジョニングにはJujuとMAASというを使っているそうなのですが、まったく知らなかったのであとで見てみようと思いました。

CRIU

OpenVZでも話に出ていたCRIUですが、コンテナのプロセスをダンプ、リストアする仕組みだそうで、これを利用してライブマイグレーションが実現できるようになるとのこと。

コンテナのライブマイグレーションができるようになると、可用性と集約率が向上するので、DockerコンテナでCRUIが使えるようになると夢が広がる感じでした。

おわりに

正直、なにもわからなかったらどうしようと思いながら参加したのですが、それなりに理解できるところもあり、次に勉強するべきポインタも沢山見付けられたのでよかったです。

スタッフの皆さん、登壇者の方々、会場を提供してくださったIIJさん、ありがとうございました。

Rubyの洋書を読む会「Working with Ruby Threads」

火曜日はRubyの洋書を読む会の日。今年に入ってからは The Pragmatic Bookshelf | Working with Ruby Threads を読んでいます。

今日はGILをもうちょっと詳しくという感じで、別にいじわるをしたくてGILを導入しているわけではなくて、これに私たちのプログラムが安全に実行できて、レースコンディションに関わる複雑なバグが起きないようにしてくれているんだよ、という話でした。

IO待ちになったスレッドはGILを勝手に開放するってのは当たり前なんだろうけどなるほどなーと思いました。

メンテナブルJavaScriptとテスタブルJavaScript

JavaScript関連の積読を2冊ほど消化しました。

どちらも、(少し前の時代の)JavaScriptという言語では、

  • メンテナブル、テスタブルなコードとはどういうことか
  • それらを評価する方法
  • サポートするツール

というあたりがまとまっていて、リーダブルコードやJavaScript:The Good Partsが頭に入っていると、スムーズに理解できそうな内容でした。

ただ、括弧書きにしている通り、特にツール類は一時代前のものが多いので、2015年ならどうだろうと読み替える必要はあるでしょう。

メンテナブルJavaScript

前半はJavaScript:The Good Partsをより実践的にしたような内容で、良いパーツはわかったんだけど、実際に書こうとするとうまく書けないという人には参考になりそうな内容でした。

個人的には10章あたりからが面白かったですね。

JavaScriptにおけるエラーの考え方、テスタブルJavaScriptにも繋がるオブジェクトの結合度、ブラウザ判定を例とした特徴検出と特徴推定など、なかなか興味深い内容でした。

ツールについては、前述の通りちょっと古いので、最近のナウいツールに読み替えたほうがよさそうです。

テスタブルJavaScript

こっちはかなりツールと細かいコードの書き方に寄っていて、時代と個人の趣向に結構依存しそうな内容だと感じました。

今読むなら、それらの詳細から一歩引いて「ソースコードの定量的な評価の方法」として見ると、コードメトリクスからテストカバレッジ、テストコードの分類などきれいにまとまっているのでおすすめです。

特によかったのは「高いカバレッジの値は誤解を招きますが、低い値は明らかに問題を示しています」というカバレッジに対する考え方ですね。

どちらかと言えばメンテナブルJavaScriptがおすすめ

筆者は二人ともYahoo!のフロトンエンドエンジニアとして大規模なライブラリの開発、メンテナンスをしていたということもあり、でてくるコードはYUIの内部のコードだったりとかなり実践的な内容にはなっていますが、いかんせん時代の流れがはやすぎますね。

テスタブルJavaScriptは今読む必要はないかなと思いますが、メンテナブルJavaScriptは今でも参考になるところは多いなーという印象です。

特に、最初に書いたようにJavaScript:The Good Partsやリーダブルコードは読んだけど、実際どうすんのよ、というところに手が届く数少ない本だろうと思いました。

散髪ログ

前回は12月だったのでちょうど2ヶ月くらい。 今回は息子と一緒にいってきた。

いつもは席がけっこう離れるんだけど、空いてたので隣で。トーマスを見ながら静かに切られていた。

バレンタイン

今年も手作りのおかしでした。おいしゅうございました。(この写真とは別に、あまったパイ生地でアップルパイが作られていました)