seri::diary

日常

第2回 かわいいKotlin勉強会 #jkug に参加しました

第2回 かわいいKotlin勉強会に参加してきました。

普段はあまり勉強会レポートとか書かないんですが、最後のじゃんけん大会に勝ってイケメンなサムライズム社長からIntelijIDEAのライセンスをタダで頂くという幸運に恵まれたのでこうして筆を取った訳でありまして候。

Intelij IDEAで私もKotlin書くよ!

 

所感

結局当日まで 一行もKotlin書かないまま、ロクな事前知識もなく行ったので細かいお話は他の人にお譲りして思ったことをつらつらと。当日の様子はイケメンが撮影してたUst録画がyoutubeに動画が上がってるのでこっちを見るのが早いです。

あと関係ないけどKotlinってKotolinってtypoしやすいの何とかなりませんか。

みんなjavaは辛いと思っていて救済を求めてる

らしいなぁ、、というのが一番感じたことでしたw

自分は1年半javaをずっと仕事でメインで使っていてストラッツとかスプリングとか使ってサーバサイドjavaを書いてた訳ですが、web開発だとそこまで長すぎるsyntaxが辛いとか匿名クラス作るのウザいとか思わなかったんですよね。

IDEのコード補完使い倒せば本質的でない部分は殆んど書かなくてすみますし。とりあえずeclipse使ってるならctrl + spaceとctrl + 1とalt + shift + mで世界は平和になります。

ただ、Androidになるとやっぱり話は別なんでしょうかね?会場でアンケート取ったら殆どの人がAndroiderでした。
Androidjava書くのがしんどい事情、実はよく分かってないのでいずれ勉強しないとですね。。仕事の関係でAndroidアプリやることになってから慌ててもしょうがないので。

Kotlin良さそう

java勢としては複雑な思いでLTを聞いていたのですがw、全体的にはkotlin良さそうだなと思いました。

変数が基本的にimmutableだったり、デフォルトでnull入れられなかったり、java 8よりもクロージャがスッキリ書けたり、javaだと人間が気をつけないといけなかった部分を言語仕様でかなり肩代わりしてくれる感じですね。

前職でSwiftを少し触った身としてはSwiftっぽいなーと思ったものですが、というよりは「今時の言語っぽい」ということなんでしょうね。Scalaも似たような言語思想ですし(なんて言うとScala逆引きレシピ著者に怒られるからやめときましょうかw)

ただ、開発環境がまだIntelij IDEAじゃないと辛いとか、言語仕様がコロコロ変わっている段階なので言語の上に乗っかるframeworkを作りにくいとか、まだまだキツイところはあるみたいなので、今後の発展に期待ですね。

個人的にははよwebアプリ作りたい所ですが、なんか主要なWAFはどれも開発が長いこと止まっちゃってるみたいな…話もあるようですが…アレ?

最後に

主催者のみなさんお疲れ様でした。

懇親会出られなかったけどまた機会があったら飲みましょう。

Kotlinサイコー

退職しました

6月いっぱいで現在の会社を辞めることになり、昨日が最終出社日でした。

関係者のみなさまには大変お世話になりました。
この場をお借りして御礼申し上げます。

 

「自社サービス事業とは何たるや」ということを身をもって学ばせて頂きました。

今の職場で勤務したのは1年と半年程ですが、それまで受託開発しか知らなかった自分にとって、単にシステムを作ることと、事業を行ってお金を稼ぐことの違いを学ばせて頂き、いかに儲かる仕組みを作るかが価値であり、そうでないものは世間からも仲間からも評価されない、ということを知ることが出来ました。

 

自分より優秀な沢山のエンジニアと働くことができました。

就職してからずっと目標に出来る先輩がいませんでしたが、この会社では初めて「この人のようになりたい」と思える人と出会い、その下で働くことができました。とても幸せなことだったと思います。

 また、僅かな期間でしたが、Scalaで有名な@takezoeさんには、言語に関係なく、OSS活動や今後の技術動向についてなど多くのことを教えていただきました。書籍を執筆したり外部で公演を多く行っている方は物事の捉え方が鋭く、またそれを分かり易く伝えることが出来ていて、こういうコミュニケーションの取り方が出来るようになりたいと思いました。

f:id:serihiro:20140621082511j:plain

 

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

Scala逆引きレシピ (PROGRAMMER’S RECiPE)

 

 

Java逆引きレシピ

Java逆引きレシピ

 

 

javaという言語のパワーと魅力について知ることができました。

前職まではPHPとjsぐらいしか知らなかった自分にとって静的言語はめんどくさい言語という程度の認識しかありませんでしたが、IDEのコード補完を駆使して高速にコーディングするという概念や、DIコンテナAOP等の新しい概念をSAStrutsやSpring等のWAFを通じて知ることが出来ました。またDBFluteというORMの使用、及び作者の@jfluteさんのハンズオンチュートリアルを通じて、変更に強いDB設計の仕方や、データ取得時の「起点テーブル」という新しい概念について学ばせて頂きました。
DBFluteDDLが書かれたSQLファイルを直接読み込んで(というか実際にSQLを実行してDBを作る)そこからModelクラスを自動生成してタイプセーフにDBアクセスすることができ、DB定義書(html)までも自動生成し、テストデータもexcelで管理できて簡単にimport/dumpができ、かつmigration管理機能まで揃っているかなり強力なフレームワークです。javaC#版がありますので、それらの言語で開発しているプロジェクトで是非使って欲しいと思います。

f:id:serihiro:20140621081527j:plain

勉強会を開催し始めました。

f:id:serihiro:20140621081901j:plain

今でも続いていますが、オフィスにイベントスペースようなものが出来たので、渋谷javaという勉強会を自社で開催させていただき、今でも2ヶ月に1回ぐらいの頻度で開催しています。
初めはカジュアルにjavaの話が出来る勉強会が無いのでやってみるかー、ぐらいのノリで始めたのですが、今では毎回満員御礼になる盛況で、FWの紹介やJVMチューニングの話やJUnitの特殊なテストケース対応や、果てはvert.xやScalaやgroovyやkotolinの話題まで飛び出すかなり濃い勉強会となっています。
自分はペーペーなので自分が使ったライブラリやFWの紹介ぐらいしか出来てませんが、毎回新しいことを学ばせて頂いていて、javaの魅力というか底力をひしひしと感じます。
この勉強会については、私が辞めた後も引き続き株式会社ビズリーチのオフィスにて不定期で実施させて頂く予定です。

 

来月からリモート勤務します。

さて辞めた後の話ですが、来月からは株式会社ハートレイルズでお世話になり、リモート勤務という新しい働き方にチャレンジする予定です。

あと言語がrubyメインになるので、今必死こいて勉強している所ですw

rubyの勉強にはパーフェクトRubyや初めてのRubyRailsの勉強にはRailsチュートリアルとパーフェクトRailsRSpecによるRailsテスト入門を使って、サンプルアプリをゴリゴリ作っています。この辺もあとで別エントリーにまとめたいと思います。

 

初めてのRuby

初めてのRuby

 

 

パーフェクトRuby (PERFECT SERIES 6)

パーフェクトRuby (PERFECT SERIES 6)

 

 

パーフェクト Ruby on Rails

パーフェクト Ruby on Rails

 

Everyday Rails… Aaron Sumner 著 et al. [Leanpub PDF/iPad/Kindle]

Ruby on Rails チュートリアル:実例を使って Rails を学ぼう

 

で、リモート勤務に慣れた頃に、大学時代を過ごした盛岡に移転する予定です。

私は大学時代から盛岡のレヴァンテマンドリンオーケストラというマンドリンオーケストラに所属してギターを弾いていて、今でも月1ぐらいのペースで盛岡に夜行バスで行って練習してくるという日々を送っておりましたが、この活動に本腰を入れたいと思ったのと、後は単純に田舎好きな人間なので、大学時代を過ごした住みやすい環境で、仕事や趣味に全力で打ち込みたいと考えたからです。

盛岡ではIWDDという勉強会コミュニティもあるし、スマフォアプリのもくもく会なども定期的に開催されているようですので、向こうに行っても色んなコミュニティに顔を出して現地のエンジニアの方々と交流していきたいと思います。あとjavaの勉強会がなかったらiwate.javaみたいのを作ってもいいかもしれませんがw、まぁそこは向こうに行ってから考えます。

 

この決断をするにあたってかなり悩みました。ただの自分の我侭じゃないのか?通勤電車や人混みや東京の環境の悪さが辛いのは誰もが一緒なのに、自分だけそこから逃げていいのか?等々。あと結婚してないのにリモート勤務とか、理由が完全に俺の『自分が住みやすい場所に住んで働きたい』っていう我侭しかないじゃん…そんなのを自分自身で許していいのだろうか…」といった感じに。

でもやはり自分に嘘はつけないという結論となり、さらにソニックガーデンでリモート勤務をされている@jnchitoさんのブログ「give IT a try」や、ハートレイルズでリモート勤務をされている@ogin_s57さんのブログ「ITエンジニアとして生きる」を読んで、決して不可能な働き方ではないと勇気づけられ、決断に至りました。また、37シグナルズの「強いチームはオフィスを捨てる」という書籍を読んで、リモート勤務の具体的なイメージをして、何とか自分なら出来そうだと感じたのも理由の一つです。

 

強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」

強いチームはオフィスを捨てる: 37シグナルズが考える「働き方革命」

 

 リモート勤務はまだ日本では実例が少ない働き方ですが、家庭を持っている方や地方在住の方にとっては大きな恩恵を得る事ができる良い働き方だと考えておりますので、このブログでもその働き方を通して感じたことや工夫していることについて紹介していきたいと思います。

 

以上、長くなりましたが退職エントリーとさせていただきました。

今後ともみなさま、よろしくお願いしますm(_ _)m

ブログのデザイン変えた

f:id:serihiro:20140601132502j:plain

最近はGithub会議に参加したりRailsの勉強したり色々としている。

RailsのERDをModelから自動生成するrails-erdで生成されるERがあまり良い感じではないのでもう少し良くできないか、テーブル情報取れるんならテーブル定義書みたいなものを自動生成できるんじゃいの?とか色々調べたりサンプル作りまくったり。

#渋谷java を運営し始めて一年ぐらいが過ぎた

#渋谷javaという勉強会を去年の6月から2ヶ月置きぐらいの頻度で自社の会議室を使って開催している。つい先日の土曜日に第六回を行った。稚拙ながら自分もゆるふわなLTをさせてもらった。

 

なんだかんだで一年近く続けてきた訳だが、この勉強会を始めた動機はたいそうなものではない。

javaでweb開発する会社に入社し、オフィスを引っ越して、30人ぐらいは入れそうな広い会議スペースが出来たのが去年の丁度6月ぐらいの時期。

折角広いスペースが出来たのでなにかやりたい、ということで上司に頼んで勉強会をさせてもらうことにした。javaを選んだのは弊社がjavaでweb開発をする会社だったので多少なりとも自社のアピールが出来ればと思ったのと、自分がLTしたかったのと、shibuya.rbやshibuya.pmがあるのにjavaは無かったのでじゃあ作ってしまえと思った程度の理由だ。

気がつけば、毎回募集すると定員の35名を大きく超える応募があって補欠待ちが常にいたり、1日で全枠埋まったりとそれなりに好評をいただいている。

「○○.java」とかいう今どきのチャラい名前をつけたので若者しか来ないかなと思ったら、初回から「java歴10年です」「java歴15年です」「java1.1から触ってます」「mavenセントラルで公開してるjavaOSSコミッタです」「Seaserの某ORMのコミッタです」、とかいうマサカリ担いだモヒカンレベルの人がゴロゴロやってきて超絶コアな話をしてくれている。その一方で自分は細々とライブラリやフレームワーク紹介をしたりポエムを披露したりしているので恐ろしくしょっぱい。。

果ては「groovyコミュから来ました」「scalaコミュから来ました」「JJUG運営から来ました」「kotolinエヴァンジェリストです」みたいな感じで色んな所から色んな人が訪れるようになって、毎回想像もつかない多様な内容のLTをして頂き大いに刺激になっている。そのうちの何人かとは仲良くなってプライベートで飲んだりするようになったのだから人の縁とは不思議なものである。

他言語の勉強会だとこういうコアな話をしまくる勉強会って結構あるものだが(特にrubyは)、javaにおいては他に自分は知らないし行ったことがない。そんなせいもあってか、普段からjavaを使い倒してる人達にとっては情報共有をするための場が不足していて、その飢餓感みたいなものが渋谷javaに集中しているのではなかろうか、と勝手に想像していて、その役割を担えているのであれば光栄なことだと思う。

ただ、java自体にそれほど新しい話題が無いのは事実で、java8が出てもいまいち盛り上がらないし、真新しいWeb Frameworkやライブラリがある訳でもないので、どこまでこの勢いが持続できるか分からない。ただ、まだまだ来る人来る人ネタを沢山お持ちのようなので、人がいなくなるまでは続けていきたいし、若者を呼びこむために初心者向けっぽいネタも体を張って提供していけたらと思っている。

 

 

人にプログラミングを出来るようにする方法

新卒教育でjavascriptを担当してたりするのだが、どうにもこうにも、自分が全くの初心者だった頃に、どうやって覚えたのか全然分からなくて困っている。

記憶にあるのは、初めてまともに勉強したプログラミング言語であるPHPの勉強ととほぼ平行して「javascript実践入門」を頭から読みまくってサンプルコードを片っ端から写経しまくって、prototypeこえー、window.onloadっておまじないじゃなかったんだー、と思った記憶ぐらいで、あとは必要に応じてググったり、jQueryだけは他の本を読んだりしてカバーしてきた。何だかんだ言ってwebのフロントエンドjsしか書いてこなかったせいもあるのかも知れないが、殆んどjsでつまづいた記憶が無い。そのせいで「jsなんぞ本読んどけば勝手にできるようになるじゃろ」という認識だったのだが、人間都合の良いことしか覚えてないだけなのだろうか。

そもそもプログラミングで躓いたというか挫折したみたいな経験をした記憶が無く、自然と他の人や本やwebで知識を得たり、人のコードを読んで自分で書いて動かして、実際のプログラムの動作と理論をリンクさせていき、そこからさらに抽象化した概念マップみたいなものを頭のなかで充実させていく作業の繰り返しみたいなことを通じて身についていったものなので、まっさらな人にどうやって教えればできるようになるのか。これが非常に難しく感じている。

プログラミングに限らず自分の場合はIT全般のスキルはみんなそうやって身に付けてて、例えばDBにしてもNWにしても、新卒で入った会社の詰め込みスパルタ教育を受けていた時も、「楽しいー!やっべー!ITすげー!」みたいな感じで勉強しまくってて、毎日やっている確認用ペーパーテストとプロジェクト演習の成績で同期で1位の成績だったらしいのだが(勿論現場に入れば分からないことだらけで凹んだが)、苦労して覚えるというか、イヤイヤ覚えるというか、そういう経験をITに関してはほぼしたことがない(強いて言えば情処の為に簿記を覚えたぐらいか)。

全くプログラミングの経験がない人間に教える事ができないのは自分の大きな課題とも言える。まずは目の前の新卒に、現場で困らないレベルの最低限のjsのレベルまで引き上げることが第一歩だろうと考えている。

近況

特に大きな変化はないのだけれど書いておく。

開発現場から離れてプロジェクト横断的に技術サポートをしたり今どきのプロダクトを検証したりしている。あとは細々とした雑用。

seleniumについて

いい加減、画面が止まると直接売上に影響がある部分ぐらいは自動テストしようよということで、今の部署に移ってから最初に着手した仕事。以前はこれをやりたくてもタスクの優先順位的にできなかった。そういう足の裏についた米粒みたいなタスクって考えてみると結構沢山あるんだと初めて知った。

Ajaxゴリゴリで描画する画面のテストケースだったのでSelenium studioは使わずにフルスクラッチSeleniumのテストシナリオを書いた。jqueryのanimateが完了するまで待たせたり何故かクリックが空振りするのでjsでDOMを指定してクリックさせるようにしたり、それでもダメならthread.sleepを入れたりと、かなりの職人技の世界だったが、その辺のハマりポイントをラップしまくったライブラリ群みたいなものが出来たので、それを使えば今後の修正は大分楽できるだろう、という所まで持っていった。

最終的にはJenkinsからWindowsのEC2 instanceを起動してjenkins slaveとして登録し、そのinstance上でSeleniumを実行して結果をjenkinsに返す所までこぎつけた。自分はSeleniumのテストシナリオだけ書いてJenkinsに設定する所は他のメンバーに託した。最近は出来るだけ他の人に任せるようにしている。以前の自分なら全部1人でやってしまっていたが、それでは組織の成長のために良くない。

fluentd + elasticserach + kibanaについて

会社で「MySQLのslow_query_logとかjavaのStacktraceちゃんと後から見返せるようにしたいよね」という話が今年初頭からあり、手元のmacで検証した上でマニュアルをせっせと社内wikiに書いた。Elasticsearchは未だによく分かってない部分が多いのだが、fluentのelasticsearchプラグインを使うことで、es側は特に何もせずともfluentのinputプラグインで定義したformat通りにmapを定義してくれて、かつtype名に日付が入れたりも出来るので、勝手にログを日別にindexやtypeを分けられたりとかで結構便利だ。まだ検証してないけど、index単位にログが分かれていた方が、後で古くなったindex毎削除した時にちゃんとデータファイルも一緒に消せるとかっていう挙動を期待している。この編はそのうち調べたい。

最近一部プロジェクトで導入でき、早速slow_queryの肥やしになっている激重SELECTを複数発見して潰すことに貢献した。この際、slow_queryのsql_textは改行混じりで複数行になるデータなので、それを一つのkey-valueとしてhashに格納するためにTail-Multilineなるプラグインを使用した。これは同僚が見つけてきてくれた。感謝。これを使用することで複数行のsqljavaのStacktraceなど複数行に渡るログファイルを綺麗にパース出来る。

ソースを見ると、通常のformatに加えて「1行目」を識別するための正規表現パターンを定義し、1行目が出てくるまでのテキストを全行繋げてbufferしておき、次に1行目が出てきた時にbufferした文字列をまとめてパースしている。中々豪快な実装でメモリの管理が少し心配になったが、このpluginで10万行ぐらいあるslow_queryログをfluentに食わせても全く問題がなかった。

これをそのまま使っても良いのだが、sqlには個人情報が乗る可能性があるので、取り急ぎforkしてconfigで指定したformatにマッチする文字列を置換する機能を追加した。例えばupdate文のset句やinsert文のvalue句などで、シングルクォートでくくられた部分を****で置換する、といったユースケースを想定している。これは取り急ぎの実装ということでinputプラグインに積んだが、本来であればoutput pluginに詰むべきだと思うし、inputプラグインでは複数のプラグインを適用できない(多分)ので、独立したoutputプラグインとして書いた方がほかのプラグインと一緒に使うには良いだろうと思う。大した実装ではないのでそのうちやりたい。gemのネタにもなるし。

slidesearch.jpについて

自分以外使ってる人がいるか怪しいサービスだが、以前一度CakePHPで書き上げたものを全てRailsで書き直した。理由は自分がRailsを勉強するためのネタとして、自由にいじれるプロダクトを一つ運用したかったから。

元々DBアクセスもなく、ただ単にslideshareAPIを叩くだけなので別にサーバサイドが何で作られていようと関係ない移植性の高いプロダクトだった。なのでAPI叩くところでライブラリ化して、普通ならただのPure Rubyのオブジェクトのインスタンス変数となるところを、個々のプロパティ毎にクラス定義したりしてDDDっぽい感じで作ってみたり、Httpリクエストの部分をMock化してrspecでテストを書いてみたり、色々とRubyを知るために実験しながら3ヶ月ぐらいかけて作り直した。あとmemcachedで検索条件からキーを組み立ててキャッシュするようにしたり。まだ中途半端なのでもう少し手を入れてから次のサービスを作りたい。

ちょっとしたサービスネタが溜まりつつある。これがPHPを1人で書いていた3年前だと、何のサービスを作っていいか分からず、結局twitterもどきみたいな良くわからないものを作って黒歴史化してしまう所なのだが、流石に時間が経つと色々とアイデアも溜まってくるものである。

 

最近考えていること

残りの人生をどう生きるか

自分は20代後半で大して人生も生きていない。

生きていないのだが、大学を卒業して就職して何年か経って、毎日満員電車に乗って出勤して仕事をして夜遅くに帰宅する、という同じような日々が続き、毎日ほぼ同じような体験をしている。エンジニアという仕事は毎日が変化のように見える人もいるかも知れないし、実際そういう仕事をしていればそうなのだろうけど、自分の場合はもう何の変化も刺激も感じなくなってしまった。誰のために手を動かしているのかすら分からなくなって、必死になって何かの為にできることを考えている。

休日になれば少し遠出したりギターを弾いたりコードを書いたりしているのだけど、それでもどこか、「また同じようなことをしている」という感覚に捕らわれる。1年を通して大体何が起きて自分が何をしているか想像が出来てしまう。

だから残りの何十年かは、ひたすら同じ体験を毎日繰り返すような感覚なのではなかろうか。そう思うようになった。何がきっかけかは分からないが。

それと共に、自分の人生は本当にそれでよいのだろうかとか何とか、まるでプロジェクト半ばに来て本当にこのプロジェクトの要件定義は正しかったのか、みたいなことを考え始めてしまった。この手の思索はどれもそうなのだが、一度考え出すと仕事中もずっとそんなことを考えてしまって止まらなくなって困っている。

散々に考えた挙句出てきた一つの明確な答えが、「自分が好きな場所で暮らして一番やりたいと感じていたことを人生でやったと実感して死にたい」ということだった。今自分が住み、働いている場所は、自分が好きな場所とは言い難い。自分は田舎生まれ田舎育ちのせいか、ずっと東京に馴染めないでいる。5年も毎日満員電車に乗って通勤してきたのに一向に慣れないし、寧ろ最近はストレスでしかなくなった。あと人が多いのにも慣れない。東京で遊びたいと思わない。休日に突然実家である栃木に帰ったり、大学時代を過ごした盛岡に行ったり、会津若松に行ってみたり、箱根に行ってみたり、足柄の山奥にフラっと行ってみたりするのもそういうことに対する反動なのだろうと思う。

薄々感付いてはいたのだけど、やっぱり自分は地方に住みたい。

でも地方に住めば、今のエンジニアとしての仕事を失う可能性が高い。IT系と行っても地方のSIerでは今時の開発をすることは難しいし、プログラマよりSEやPMの方が(単価が高いという理由で)求められるだろう。そのせいで躊躇している。

結局、今みたいにバリバリコードを書ける環境が都会にロックインされている。そのことが少なからず自分は辛く感じ始めている。それが最近色々悶々としている理由なのだと思う。

ここまで書いて少しスッキリした。

 

話は変わるが、ソニックガーデン代表の倉貫さんのブログを良く読んでいるのだが、こういう会社でこういう働き方が出来たらいいなと感じている。

リモートワーク(在宅勤務)を導入するためのポイントと残された課題 | Social Change!

自分がすぐそういう働き方ができるとは思っていないけど、それでもいつかそれを実現することを目標にして動こうとしている。

それを活力に少しでも前向きに生きられたらいいなと思う。