詩と創作・思索のひろば

ドキドキギュンギュンダイアリーです!!!

Fork me on GitHub

Router::Simple::Reversible という Perl モジュールを書いた

https://metacpan.org/pod/Router::Simple::Reversible

だいぶ昔に書いていたのを shipit しました。tokuhirom さんの Router::Simple に、いわゆるリバースルーティングを足しただけのモジュール。Router::Simple を継承しているので、bless しなおすなりして使えばよいかと思います。

新しく生えるメソッド $router->path_for$router->match で返ってくるような hashref を渡すと、いい感じにルーティングのルールが具体化されたかたちで文字列が返ってくるシンプルな API です。テスト を見るとだいたい使い方がわかります:

my $router = Router::Simple::Reversible->new;

# from Router::Simple's pod
$router->connect('/', {controller => 'Root', action => 'show'});
$router->connect('/blog/{year}/{month}', {controller => 'Blog', action => 'monthly'});
$router->connect('/wiki/:page', { controller => 'WikiPage', action => 'show' } );
$router->connect('/download/*.*', { controller => 'Download', action => 'file' } );

is $router->path_for({ controller => 'Root', action => 'show' }),
   '/';

is $router->path_for({ controller => 'Blog', action => 'monthly' }, { year => 2015, month => 10 }),
   '/blog/2015/10';

is $router->path_for({ controller => 'WikiPage', action => 'show' }, { page => 'HelloWorld' }),
   '/wiki/HelloWorld';

is $router->path_for({ controller => 'Download', action => 'file' }, { splat => [ 'path/to/file', 'xml' ] }),
   '/download/path/to/file.xml';

is $router->path_for({ controller => 'NoSuchController', action => 'show' }),
   undef;

何か変なところがあったら GitHub リポジトリ のほうまでお知らせください。

A Tour of Go のその先: 『みんなのGo言語【現場で使える実践テクニック】』

著者の一人であり、同僚でもある songmu さんに『みんなのGo言語』をいただきました。Go言語界隈の有名人がずらりと顔を並べていて豪華。拙作のツールも大きく取りあげていただいて、ありがたいです。

自分もGoという言語が好きで、趣味ではよく書いている(最近はおろそかだけど)んだけど、執筆陣はリアルワールドでGoを使いこなしている歴歴。オムニバス形式の各章がそれぞれの著者の背景を反映してバラエティに富んでおり、A Tour of GoEffective Goを終えた人が、入門一歩先のGoをつまみ食いするのにとても良い本だと思った。

思ってみれば、Goは簡素な文法をもつようデザインされていて、要所を押さえた標準のツーリング等々を見ても、その使用者に与えられている道具というのが意図的に限られている言語だった。そしてそのことが、コードだとかプロジェクトの構成だとかの、書かれたものとしてのGo言語全体の複雑度を下げることに貢献しているのだけれど、一方でGoはさまざまの実用的な目的のために使われる言語でもあり、使用者はその乏しい表現力の中でいかに現実的な課題を解くのか、という問題に直面することにもなる。

そこでGoで本格的なプログラムを書くには、言語そのものへの知識に加えて、その周辺に醸成されているイディオム的な語彙を身につけることが他の言語に比較して重要になると思う。そういうものってのは常にドキュメントされているものではないわけで、Go的なやり方を知るためには例えば自分はGo公式のソースコードを読んできた(この本でも何人かの著者が紹介している)けれど、今回この本が登場したことで、より分かりやすい形での指南役が増えたのは喜ばしいことだと思う(あと『Go言語によるWebアプリケーション開発』の鵜飼さんによる巻末付録とかもいい)。

すでに語られているし、個別の内容にはあまり触れる必要はなさそうだけど……、songmu さんによる1章、fujiwara さんによる3章、suzu_v さんによる6章はGoを書く人なら全員読む価値があり、mattn さんによるマルチプラットフォーム、deeeet さんによるコマンドラインツール、lestrrat さんによる reflect パッケージはそれぞれ各論のすばらしい解説になっている。自分はLL的なバックグラウンドをもっているのだけれど、そういう観点から見たGoというのも各所で語られていてよかった。

今後Goの入門系の書籍であればウェブアプリケーションとか、並行処理に特化した話題も気になってくるところですね。読みたい〜。

みんなのGo言語【現場で使える実践テクニック】

みんなのGo言語【現場で使える実践テクニック】

はてなの3代目CTOに就任しました

はてな退職の辞 - stanaka's blog にある通り、id:stanaka の引退に伴い、2016年8月1日付で私の勤務する株式会社はてなのCTOに就任いたしました。初代のはてなCTOが id:naoya でしたので、3代目のCTOということになります。

はてなで働きはじめたのは2006年、アルバイトの学生としてでした。まだはてなの本社が東京にあったころの話です。もともとはてなはユーザとして使っていて、すごいエンジニアが面白いものを作っている憧れの会社だったのを覚えています。入社すると社内で使っているグループウェア(はてなグループ)のメンバーにしてもらいましたが、そのグループ日記やキーワードにそれまでのはてなのサービスづくりにまつわる議論ほかもろもろのログが残っていて、全てにアクセスすることができたのは印象に強く残る経験でした。

はてなが京都に本社を移転した2008年より正社員として働きはじめました。これまで、うごメモはてな、はてなランド、はてなブログ、Mackerel、その他大小さまざまのサービスにアプリケーションエンジニアとして関わり、その間はてなにおけるサービスの設計や開発フローが進化してゆくのを目の当たりにしてきました。2012年からはチーフエンジニアとなり、プログラムを書くかたわら、エンジニアの採用・教育・評価などに関わっています。それから気づけばエンジニアの数は倍増していて、かつてとはエンジニア組織内外の力学とか、コミュニケーションのあり方が変わってきているのを感じます。

id:stanaka とは、新卒のころ、うごメモはてなの開発の際に一緒に仕事をする機会がありました。開発環境セットアップからミドルウェアの選定までいろいろな面で技術的な判断と実作業をされていて、当時から頼れるお兄さん的存在に見ていたことを思い出します。最近では私が Mackerel のディレクターをしていた際、プロデューサーおよび創案者としてサポートしてもらい、新しいプロダクトをともに作り上げる経験も積ませてもらいました。

アルバイトを含めると10年間はてなという組織の中にいて、その変化を見てきたことになります。エンジニアの数は10人から40人、社員全体なら100人にまで成長し、はてなのテクノロジー企業としての主戦場もウェブだけにはとどまらなくなってきました。組織構造も試行錯誤の中いろいろと進化を遂げてきましたが、いっぽうで変わらなかった良い点もたくさんあります。

その中のひとつで気に入っているのが、エンジニア的な美徳のひとつでもあると思いますが、我々は技術的・知的に誠実であるべきであるという考え方です。初代社長の id:jkondo 以下、会社の最初期からはじまった(のであろう)この態度が会社全体に浸透していることはつねづね強く実感することですが、こういった文化が今も存続していることは必然的なようにも、ただ運が良かったようにも思います。はてなという会社が持つ良き文化をこれからの成長にあっても維持し増大させていくために、エンジニア側の視点から貢献していくのがCTOとしての仕事のひとつになると思っています。また前任の id:stanaka が Mackerel で会社の新しい事業を拓いていったように、技術の分野からビジネスに貢献することもゆくゆくは目指していきたいと思っています。当面は引き継ぎを行いつつ、チーフエンジニアとして携わっていたエンジニア向けの教育と社内の情報共有の強化をいっそう進めていくつもりです。

CTOという仕事は自分にとっては未知の分野であり、大きなチャレンジになると思います。今後とも、はてなとはてなのエンジニアをよろしくお願いいたします。

はてなで一緒に働きませんか?