ブックオフでScalatra in Actionを発見した

先日近所のブックオフで発見したので思わず確保してしまいました。

だいぶ前に出た本ですでに古くなってしまっている部分も多いのですが、自分が開発に関わっているフレームワークの書籍が出る機会というのは早々ないと思うので記念に取っておこうと思います。

他にも何冊かManningのIN ACTIONシリーズが並んでいたので近所在住のエンジニア氏が転居などでまとめて処分されたのでしょうか。もしかしたら近所にScalatraユーザの方が住んでいたのかもしれないですね。

IntelliJのScalaプラグインでTwirlエディタがdefiningを認識しない問題

GitBucketではHTMLのレンダリングにTwirlを使っており、IntelliJScalaプラグインに付属しているTwirlエディタを便利に使用しているのですが、どういうわけかこのTwirlエディタがdefiningを認識せず、definingで定義した変数の補完が効かなかったりエディタ上でエラーとして表示されてしまうという点を不便に感じていました(Playプロジェクトじゃなから?)。

f:id:takezoe:20220117124800p:plain

ずっと諦めていたのですが、最近IntelliJの設定をあれこれ見直しているとフレームワークのPlay2の設定のところにインポートの設定があることに気づいたので、ここにdefiningを提供しているplay.twirl.api.TwirlFeatureImpots._を追加してみたところ、無事definingを認識するようになりました。

f:id:takezoe:20220117122053p:plain

巨大かつ複雑なテンプレートほどdefiningで変数を定義したくなるので、今まで結構不便だなぁと思っていたのですが、これでだいぶ快適になりました。ただ、この他にもmapでcaseを使って分解した変数を認識してくれないことがあったり(ちゃんと認識してくれるケースもある)、Twirlエディタの挙動は結構謎な感じがありますね…。

エクストリームフットボール 欧州の勢力図を塗り替える巨大ドリンクメーカーの破壊的戦略

以前から楽しみにしていたレッドブル本を近所の書店でゲットできたので冬休みの課題図書として読んでみました。

近年サッカー界を席巻しているレッドブルグループの歩みがまとめられているのですが、レッドブルがブラジルでもクラブチームを保有していたり、アフリカでは失敗していたりなど、知らなかったこともたくさんあって面白かったです。ニューヨークでライト=フィリップス弟がアンリのサポートで覚醒して大エースとして活躍していたとか、カヌーテがアフリカでコンサル会社を経営してたりとかw エクストリームスポーツやF1など、サッカー以外の分野におけるレッドブルのスポーツへの取り組みについても触れられています。

しかし、あとがきでも書かれていますが、ラングニックはすでにレッドブルグループを離れ、ナーゲルスマンはバイエルンに移り、ナーゲルスマンの後を引き継いでライプツィヒの監督を務めていたマーシュは速攻で解任されてしまうなど最近は若干怪しい空気も漂っており、今後もレッドブルグループの躍進が続くのかは興味深いところです。

現実的にはライプツィヒブンデスリーガやELのタイトルを取るかCLで上位に進出するといったあたりが次の目標になると思うのですが、資金力があるとはいえ若い選手を育てて売る現在のスタイルだと監督がよっぽど有能でないと難しいのではというのが正直なところ。さらに若手として獲得した主力選手の中には売り時を逃した感のある選手も出てきており、転換期に入ってきている感があるのでここで舵取りを間違えると短期的にはしばらく低迷してしまうということもあるかもしれません。もしくはさらに他国のリーグに進出するなど予想外の手を打ってくるのか…。

なお、原著はこちらの模様。ちょっと読みづらい部分があるのは著者の方はこれが処女作というせいもあるかもしれません。分量もそれほどでもないので原著で読んでみてもよかったかも。

2021年の振り返り

今年も年末ということで毎年恒例の振り返りをしてみました。

f:id:takezoe:20211204130940j:plain

引っ越した

以前住んでた家はとても気に入っていて20年近く住んでいたのですが、リモートワークで自宅で作業することが増えたものの十分なスペースがなかったこと、駅から少し距離があり買い物などもやや不便だったことなどからついに引っ越しを決意しました。

都心からは以前より少し離れてしまいましたが、仕事部屋も確保できましたし、スーパーなども近くなって一気に便利になりました。その反面、近場で用事が全て済んでしまうので益々引きこもりが捗りそうで健康には悪そうです。まあ周囲には飲食店もたくさんありますし、駅が近くなったので状況が落ち着いたら休日なども気軽に出かけられるかなと思います。仮に通勤するとなっても以前より楽なんじゃないかと思います。

ただ、引っ越して半年以上経つのですが、まだ住所変更などの手続きが全部終わってない…。近隣で引っ越すだけでもこれだけ面倒なので、海外移住してる人たちは偉大だなと思いました。

仕事関係

今年も色々あったなーという感じですが、大きいところではトレジャーデータに入社した年から取り組んでいた(当初は自分の仕事ではなかったのですが成り行き上引き継ぐことになった)3年越しのマイグレーションプロジェクトをついに終わらせることができました。

いわゆる技術的負債の返済というやつだったんですが、依存コンポーネントが多かったり、普段のオペレーションにガッツリ組み込まれていたり、予期せぬトラブルがあったり、諸事情で何度も長期に渡って作業を中断せざるを得なかったりなど本当に大変でした。今は新たなマイグレーションプロジェクトが進行中なのですが、こちらは滞りなく完了できることを祈るばかりです。

他にもARMからの離脱だったり(短いARM人生だった…)、上司が変わったり、組織が変わったりなど色々ありましたが、まあなんとかやっています。引き続き丸一年間リモートワークでしたが、引っ越して仕事部屋を確保でき、年末にはデスクも広いものに買い換えたので去年よりは快適に作業できるようになりました。

takezoe.hatenablog.com

ただ、休日や深夜のトラブル対応などについては体力的に年々しんどさが増していくなという感じがします。1日徹夜作業をすると2〜3週間体調が戻らない感じ。プログラミングはともかくこういう部分でソフトウェアエンジニアの年齢による限界説はやはり事実なのかもしれないと思ったりしました。自分の体力の無さもあるとは思いますが…。

また、そういったことがなくてもリモートだと長時間作業してしまいがちなので、今年は積極的に休暇を取るようにしていました。社会人になってから一番休んだ年だったのではないかと思います。

OSS関係

今年もあまりアクティブに活動していたというわけではありませんでしたが、仕事の絡みもあってTrinoやApache RangerなどにいくつかPRを出してマージしてもらったりしていました。RangerはもともとClouderaで開発されたもののようですが、コードのクオリティがだいぶ厳しい感じなのと、GitHubではなくReview Boardを使ってレビューを受けないといけなかったりと割と面倒な感じでした。

GitBucketもホットフィックスを含めて4回だけのリリースでしたが、ついに100リリースに到達しました。今年はScala Love in the CityでGitBucketの発表させていただいたりもしました。また、Gitterでのサポートなども以前よりも活発にできたかなと思います。

takezoe.hatenablog.com

あとは会社で公開しているRuby用のPresto/Trinoクライアントのメンテナンスなどもしていました。業務でもRubyで書かれたコンポーネントに触らざるを得ない機会があるのですが、Rubyはまるでわからないので勘とコピペで凌いでいます…。

takezoe.hatenablog.com

他にも初めてGitBucketのユーザさんからのレポートがきっかけでsbtにPRを出したりなど、数は少ないですが今までとは違ったこともできたのはよかったかなと思います。

takezoe.hatenablog.com

読書

読書用端末としてiPad Miniを購入したので頑張って洋書を読むようにしています。今年読んだ本では以下のものが面白かったです。

takezoe.hatenablog.com

takezoe.hatenablog.com

技術書以外では、ベンゲル監督の自伝であるMy Life in Red and Whiteは長年のアーセナルファンとしては必読という感じでした。Kindle版で読んだのですが、ハードカバー版やその後発売された日本語版も購入してしまいました。

takezoe.hatenablog.com

かなり今更感があるのですが、The Fourの原著を読んだりもしていました。

takezoe.hatenablog.com

また、クイーンズギャンビットの原作小説や舞台版ハリーポッターのスクリーンプレイなどを読みました。クイーンズギャンビットは古い作品ですしチェスのことも全然わからないのですが、臨場感があって面白かったです。Netflixのドラマも見てみたいと思いました。ペーパーバック一冊読み切るのもそれほど苦ではなくなってきたかなという感じですが、ビジネス書はともかく小説の類は普段読んでいる英語とボキャブラリが全然違うのでまだまだ読むのにかなり時間がかかります。

和書では去年から積んでいた三体をようやく読みました。技術書でも今年は仕事ではじめる機械学習 第2版やユニコーン企業のひみつ、詳説データベースなどオライリーの良書を読むことができました。特に詳説データベースは一周では到底理解しきれなそうなので繰り返し読んで理解を深めたいと思います。

takezoe.hatenablog.com

takezoe.hatenablog.com

takezoe.hatenablog.com

takezoe.hatenablog.com

takezoe.hatenablog.com

家から出ないので読書は趣味としてよさそうなんですが、歳のせいか最近は時間があっても本を読んでるとすぐに眠くなってしまうのでなかなか思ったほどは捗らなかったです。ただ、技術書以外の本を読むのは気分転換になってよかったです。

まとめ

今年も一年、基本的に引きこもっていたので仕事をするか本を読むくらいしかすることがなかったなーという感じでした。趣味でコードを書こうと思ってもPCを開くとついつい仕事をしてしまうのはよくないですね…。逆にPC開くと仕事をしてしまうので、休日は敢えてPCに触らない時間が増えました。

英語に関しては読書はしていたものの、オンライン英会話などはさすがに4年以上やってると飽きもあって最近は若干サボりがちになってしまっている感じ。仕事では周囲の日本人向け配慮もありそこまで困ることはなくなってきたんですが、逆にそれに甘えてしまっている部分もあるので気合いを入れ直して引き続き精進していきたいところです。

そういえばワクチン接種の際に数年ぶりに渋谷に立ち寄ってみたのですが、色々変わっていてビックリしました。あまり小綺麗になると渋谷らしくなくなってしまうような気もする一方、周囲のビルが次々と建て替えられていく中、前職勤務時から取り壊されるという話だった某ビルがいまだに健在だったりして笑ってしまいました。

Googleのソフトウェアエンジニアリング ―持続可能なプログラミングを支える技術、文化、プロセス

原著の発売時から読んでみたいと思っていたのですが分量(600ページ超!)に躊躇していたところ、なんと読み始める前に日本語訳が出てしまったのでありがたく日本語で読ませていただきました。

体裁としてはSRE本と同じく体型的に章立った一冊の書籍というよりはショートエッセイ集という感じなのですが、トピックごとにまとまっていたり、章のタイトルから内容の想像が付きやすかったりということもあってSRE本と比べると読みやすかったです。訳書ならではの読み辛さや原文を確認しないと意味がよくわからない箇所はどうしてもあるのですが、それでもこの分量を英語で読むのにかかるであろう時間を考えると日本語訳が存在するのはありがたいことです。

内容についてはカルチャー、テスト、ツール、デリバリーなどそれぞれのカテゴリごとに一冊の本が作れてしまい愛そうなほど広範な内容を扱っています。分量もあるのでまずは気になったところだけ拾い読みする感じでもいいかもしれません。

個人的にSRE本は「それってGoogleだからだよね…」と感じる部分が多くあまり参考にならないなぁと思ったりしたのですが、今回は一般的なソフトウェア開発組織でも(少なくとも数十名〜数百名規模のエンジニアリング組織であれば)比較的身近であろうトピックが多く、すでに実践しているプラクティスでも改善のヒントが得られたり、普段自分たちが困っている問題に関してGoogleでも解決できていないこともあるんだなぁといった部分を含め、全編通して興味深く読み進めることができました。

この4年間の英語学習の振り返り

本格的に英語学習を初めてかれこれ4年ほど経ちました。もちろん自分の英語力はまだまだ全然ではあるのですが、この4年間でどのような学習をしてきたか、何が効果的だったかを振り返ってまとめてみました。

オンライン英会話

4年ほどDMM英会話を続けています。並行して他のオンライン英会話サービスもいくつか試してみたのですが、なりきりロールプレイのようなレッスンが個人的にあわなかったりなどで結局ずっと続いているのはDMM英会話だけです。現在は会社の福利厚生でネイティブ講師も選べるプランで受講しています。

eikaiwa.dmm.com

DMM英会話のよいところは継続のしやすさだと思います。教材も豊富ですし、先生もフランクな方が多く、単純に話していて楽しいので気分転換にもなります。英語を話す抵抗をなくすという意味ではかなり役立ったと思います。一方でこれはオンライン英会話全般に言えることではありますが、オンライン英会話だけでは英語力はさほど向上しないと思います。もともと基礎がある方は別ですが、自分の場合はそれ以外の学習にもかなり時間を使っていました。

なお、DMM英会話の特典として、iKnowという単語アプリを無料で使えるというものがあります。このアプリはなかなかよくできていて、英単語を例文とあわせて音声付きで繰り返し学習できます。一時期通勤電車で毎日ひたすらこれをやっていました。

iknow.jp

ポッドキャスト

リスニングの教材としては主にポッドキャストを活用していました。最初はESL.comという第二言語として英語を学んでいる人向けのポッドキャストを聞いていたのですが、途中から有料化されてしまったのでCulipsに切り替えました(Culipsもポッドキャスト自体は無料ですが、課金するとテキストをダウンロードできます)。

www.culips.com

Tech系のポッドキャストもいいのですが、めっちゃ早口だったりしてかなり聞き取るのが難しいですし、一本の時間も長くて繰り返し聞くのが大変なので、自分の場合はCulipsのような難易度の低いものから始めるのがよかったです。ポッドキャストも主に電車通勤の時間を利用して聞いていました。

TOEIC

英語学習にも何かしら目に見える目標があった方がモチベーションになるだろうということでTOEICも何度か受けてみました。特にTOEIC用の対策はしませんでしたが、リーディングの教材として市販のTOEIC対策本の中でも長文読解のテキストだけは読んだりしていました。

なんだかんだ言われていますが、TOEICは英語力が付けばきちんと点数に反映される試験になっていると思うので、特に英語学習の初期段階では学習の進捗状況を測るために受けてみるのもよいのではないかと思います。

読書

以前から英語のブログや技術書、論文などは読んでいたのですが、リーディングの訓練としてそれ以外のものも読むようにしています。オンライン英会話の先生に教えてもらったのですが、いくつかの出版社からGraded Readerという英語初学者向けの書籍のシリーズが出ているのでまずはそういうものから読み始めました。

様々なトピックの中から自分の興味にあったものを選ぶことができますし、一冊の分量も少なく、使われている英語もレベルに応じた簡単なものになっています。分厚い書籍だと手をつけるのが億劫になってしまうので、まずはこういうものから始めるとよいのではないかと思います。

www.pearson.com

ibcpub.co.jp

www.penguinreaders.co.uk

最近は普通の小説なども少しづつ読んでいます。技術書と全然ボキャブラリが違うので子供向けのものでも読むのにとても時間がかかります。無理せず自分の興味がある本を読むのがいいですね。

NHKラジオビジネス英語

英語学習というよりは自宅での趣味の一環という感じでしたが、今年の4月から9月までの半年間、NHKのラジオビジネス英語を続けていました。毎月紙のテキストを購入しつつ、Webやスマートフォンのアプリで放送を聞いていました。

放送もさることながらテキストがよくできていて、メールを書く際の注意事項など実務でも役に立ちそうな内容が多かったです。また、長文の回などもあったりして、普通に読み物としても面白かったです。テキストはKindleでも購入できるのですが、書店に毎月テキストを買いに行くという行為が地味にモチベーションになっていたような気がします。

下半期は上半期の再放送をしているようですが、4月からまた新講座が始まるようであればチェックしてみたいと思います。NHKの語学コンテンツは非常に充実しているので他の講座を受講して見るのも面白そうです。放送はWebやアプリで聞けますし、テキストの入手性が高いのもよい点です。

やってみたけどあまり続かなかったもの

映画やTVドラマを英語で見るというのは正直難易度が高すぎて英語学習として考えると自分のレベルではかなり効率が悪い方法だなと感じました。英語学習というより趣味の延長として好きな映画を日本語字幕、慣れたら英語字幕を付けて見たりするのは良さそうかなと思います。繰り返し見れるお気に入りコンテンツがあることが前提ですね。

会話がある程度こなせるようになった段階でライティングの添削サービスもしばらく試してみて、これは結構良かったのですが、実用性の観点からは(主に時間的に)費用対効果が微妙かなという感じで続きませんでした。ただ、文法的な間違いだったり普段なかなか指摘されないような細かい部分を指摘してもらえたりするのできちんとした英語のライティングを訓練したいという場合には有用だと思います。

まとめ

とはいえ英語学習で一番効果的だったのはやはり「仕事で使う」ということだと思います。強制的に英語を使わざるを得ませんし、学習の強力なモチベーションにもなります。ただ、現在勤務しているトレジャーデータでは業務上のコミュニケーションは英語が基本ですが、エンジニア含め日本人メンバーも多く在籍しているので日本人同士であれば日本語で会話ができますし、海外のメンバーも日本人と話し慣れていることもあり、比較的敷居が低いという面はあると思います。

また、「英語学習は人によって出発点が違いすぎるので、学習法について他の人の意見はあまり参考にならない」という気付きもありました。基礎はできているけど会話経験がなくて話せないという人と、そもそも文法やボキャブラからして覚束ない人では当然ながら必要な学習内容も学習方法もまったく異なります。まずは色々やってみて、自分のレベルに応じた学習内容・方法を見つけると学習を継続しやすいのではないかと思います。

自分の場合、通勤電車が貴重な英語学習の時間だったところ自宅勤務になって時間が取れなくなってしまった面はあるのですが、当時すでにアプリもだいぶやり込んでしまっていて他の学習方法を探していたりしていた頃だったので、自宅での趣味を兼ねて読書を増やすなど生活スタイルに合わせて学習方法も移行するよいタイミングだったかもしれません。現在の自宅勤務の状態で同じことができるかというとなかなか難しい気がするので最適な学習方法はその時々の生活スタイルに左右されるところも大きいかもしれません。

モノリスからマイクロサービスへ ―モノリスを進化させる実践移行ガイド

長らく電子積読になっていたのですがようやく消化しました。

モノリスからマイクロサービスへの移行パターンのカタログ集といった感じです。マイクロサービスへの分割でなくてもモノリスのモジュール化や既存のシステム分割、移行、拡張などの際などに役に立つ内容だと思います。書籍の中で紹介されていたGitHubのScientistというライブラリは知らなかったので参考になりました。

github.com

序盤は組織としてのマイクロサービスへの移行戦略、中盤からはサービスの分割、データベースの分割に使えるパターンのが紹介されています。とりわけデータベース部分はかなり歯切れが悪く、ここに書いてあるパターンは参考程度に各自の状況に応じて頑張れという感じです。まあトランザクションが絡む部分以外はマイクロサービスに関わらず一般的なデータ移行の難しさそのものなのでそれはそうかなという感じですが…。

マイクロサービスへの移行とはちょっと違いますが、以前GitHubのブログに書かれていた以下の記事はアプリケーション側のDBアクセスライブラリにLinterを入れることで論理的に分割されたテーブルへのアクセスが残っていないことを確認するという手法が紹介されていて、アプリケーションがきちんと決められたお作法にのっとって実装されている必要はありますが、データベースの分割時はこのような方法も有効そうだなと思いました。

github.blog

最後のマイクロサービスあるある問題ではトラブルシュートの難しさ、ローカルでの開発体験の悪さ、エンドツーエンドのテストの問題点、孤児サービスなど自分たちも普段実感している課題がたくさん挙げられていました。実際に直面してみると当然の課題ではあるのですが、これからマイクロサービスへの移行を検討しようという段階で将来こういう問題が起きるであろうということがわかっていると事前に備えるための助けになるのではないかと思います。

実際のところはマイクロサービス化しないと立ち行かない状態にまで成長したモノリスをこの本で書かれているようなパターンにきれいに当て嵌めて分割するというのはあまり現実的ではないと思いますが、これからマイクロサービス化を検討するといったフェーズではどういう戦略、戦術を取り得るかの出発点として基本的なパターンを押さえておくのに良さそうだなと思いました。