SSブログ
前の10件 | -

予約受付中:『Go 言語 100Tips』 [本]

私にとって21冊目となる技術書の翻訳本の予約受付が、Amazon.co.jpで行えるようになりました(カバーデザインはまだ確定していません)。

Go言語100Tips 開発者にありがちな間違いへの対処法 (impress top gear)

Go言語100Tips 開発者にありがちな間違いへの対処法 (impress top gear)

  • 出版社/メーカー: インプレス
  • 発売日: 2023/08/08
  • メディア: 単行本(ソフトカバー)

以下は、本書からの引用です。
推薦の言葉

Go 開発者が製品環境でコードに触れる前に必ず読むべき本です。『Effective Java』に相当するGoの本です。
— Neeraj Shah, Nutanix

わかりやすく、効果的な例題。間違いがなぜどのように起こるのかを理解することで、コスト的に高くつく手痛い失敗を避けられます。
— Giuseppe Maxia, VMware

Teiva Harsanyi は、実際に起こった問題や見逃しがちな問題を分類し、なぜそれらが起こるのかという微妙な違いがある世界まで掘り下げています。あなたが本書を持っていないのは、101個目の間違いとなるでしょう。
— Anupam Sengupta, Red Hat

悪い習慣を見極めて、よい習慣を身に付けてください。文章は魅力的で、例題は適切であり、洞察は見事です。
— Thad Meyer, LI-COR Biosciences


目次

第 1 章「Go:学習は容易、習得は難しい」
第 2 章「コードとプロジェクト構成」
第 3 章「データ型」
第 4 章「制御構造」
第 5 章「文字列」
第 6 章「関数とメソッド」
第 7 章「エラー管理」
第 8 章「並行処理:基本」
第 9 章「並行処理:実践」
第 10 章「標準ライブラリ」
第 11 章「テスト」
第 12 章「最適化」

本書について

『Go 言語100Tips 開発者にありがちな間違いへの対処法』には、Go開発者が言語のさまざまな機 能を扱うときについやってしまいがちな100個のよくある間違いが含まれています。本書は、外部ライブラリやフレームワークではなく、Go言語そのものと標準ライブラリに大きく焦点を当てていま す。間違いについてのほとんどの議論では具体例を示しており、どのような場合にその間違いを犯しやすいかを説明しています。本書は、考えや手法を押しつけるものではありません。個々の解決策は、それが適用されるべき状況を伝えるために詳しく説明されています。

コメント(0) 

記事「実践API設計」 [本]

WEB+DB PRESS Vol.134

WEB+DB PRESS Vol.134

  • 出版社/メーカー: 技術評論社
  • 発売日: 2023/04/22
  • メディア: 単行本(ソフトカバー)

雑誌の記事を最後に執筆したのは、「Software Engineer Vol.1」(技術評論社、2007年4月)だったので、16年振りに記事を書きました。
堅牢で、保守性に優れたWebサービスの実現
仕様ファーストでいこう!
実践API設計

ウェブサービスの開発に従事するようになったのは、リコーを早期退職して、2017年9月から働き始めたソラミツからでしたが、その後、メルペイ、現在のカウシェと、バックエンドのサービス開発に従事しています。実際に本番サービスとして使われるサービスを開発したのはメルペイからです。

私自身は、1984年に就職してからのワークステーション開発、その後のデジタル複合機開発と長年ウェブサービスには関わることはありませんでした。2018年6月からメルペイでマイクロサービスの開発に従事したときに考案して、その後、さまざまなマイクロサービスの開発、および、現在のカウシェでも実践していることを記事としてまとめています。発売は、4月22日です。

5章から構成されます。
第1章 優れたAPI 仕様とは何か
    よくある問題点と、記述すべき事柄
第2章 gRPC におけるAPI 仕様の書き方
    サービスの概要、エンドポイントの説明、エラーの説明
第3章 API 仕様ファースト開発
    仕様を先に記述し、テスト駆動で開発する
第4章 E2E テストフレームワークの構築
    API 仕様ファースト開発のための独自実装
第5章 API 仕様の技術的負債の返済
    サービスの成長を支えるための改善活動

コメント(0) 

三年間の在宅勤務 [プログラマー現役続行]

コロナがきっかけで2020年2月18日から在宅勤務(WFH:Work From Home)を始めて、ちょうど二年が経過しました。二年前と一年前の記事は、以下の通りです。
この一年間を簡単に振り返ります。

7回目の転職

大学院を修了して1984年4月に富士ゼロックスに就職してから7回目となる転職を、2022年10月にしました。年賀状も、先輩からは再雇用が終わりました、後輩からは定年を迎えましたというものが増えてきました。8社目となるカウシェでも、メルペイのときと同様に、ウェブサービスのバックエンドサービスをGo言語で開発をしています。Go言語との付き合いも13年となります(ちなみに、Javaは27年)。

メルペイおよびカウシェで私なりに工夫してきたバックエンドサービスのテストについては、4月下旬発売の雑誌に記事として掲載される予定です。雑誌の記事を執筆したのは、「Software People, Vol.8」(2006年3月発売)以来なので、17年振りとなります。

技術書の翻訳

この一年間では、幸い2冊の技術書を翻訳して出版することができました。

スーパーユーザーなら知っておくべきLinuxシステムの仕組み

スーパーユーザーなら知っておくべきLinuxシステムの仕組み

  • 出版社/メーカー: インプレス
  • 発売日: 2022/03/08
  • メディア: Kindle版
PDF版は、出版社のサイトから購入できます(こちらです)。

Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築

Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2022/08/03
  • メディア: 単行本(ソフトカバー)
PDF版は出版社のサイトから購入できます(こちらです)。

技術書の翻訳としては、『Go言語による分散サービス』でちょうど20冊目となりました。現在、21冊目となるGo言語に関する書籍の翻訳を行っていますので、夏以降に発売になるかと思います。

オンライン読書会

この一年間もいろいろとオンライン読書会を主催してきました。
基本的に月1回、土曜日の午後1時から午後5時までの4時間のオンライン読書会ですが、継続して実施することで、一冊の本を読み切ることができます。「横浜Go読書会」は、Go言語に関する書籍を読む読書会です。「技術書読書会」は、特定の技術に関する技術書ではなく、ソフトウェアカルチャーやソフトウェアエンジニアとしての心得的な技術書を読む読書会です。「技術書読書会2」は、基本的に私が翻訳した技術書を読む読書会になっています。

技術教育

この一年は、『Effective Java 第3版』研修を1コースだけ実施しました。月に1回で、合計6回に分けて、各回で指定された範囲を事前に読んで、疑問点を質問表に記入してもらいます。研修当日はその質問に回答していくという形式の研修です。休憩ごとに気分転換に『Java Puzzlers』のパズルを解いてもらいますが、正解する人はあまりいません。

『Effective Java 第3版』は、多くのJavaプログラマが読んでいると思いますが、詳細まできちんと理解して読めている人は少ないのではないかと思います。以前は、オンライン読書会として、「Effective Java 第3版読書会」を主催していましたが、参加者があまりにも少ないので、現在は開催していません。

健康面

2020年6月20日(土)に急性心筋梗塞で救急搬送されて以降、薬と食事制限を続けており、週に5,6日は自宅での30分間のエアロバイクも継続しています。お酒も、基本的には一日おきです。

30代から50代まではずっと、健康診断や人間ドックでの血液検査でさまざまな値が悪かったのですが、現在はほとんどすべての検査項目が正常値に収まっています。また、長年、人間ドックでは超音波エコーによる「脂肪肝」の所見があったので、過去2回の人間ドックでは「脂肪肝」の所見はなくなりました。

在宅勤務という働き方

1984年に就職した頃は、ソフトウェア開発を行うには、会社に行くしか選択肢はありませんでした。ソフトウェアの開発環境はすべて会社にしかなかった時代です。1990年代には、電話回線を使って会社のコンピュータへ入って、自宅から簡単な作業ならできたりもしたのですが、基本は会社へ出社でした。そして、2020年初めにコロナの感染が広がる前まで、出社していた訳です。ただし、その頃は、何かのときには自宅から普通に作業できる環境にはなっていました。しかし、体調不良とか、雪で交通機関がマヒしているとかでない限り、出社でした。

そして、コロナによる在宅勤務が始まり、それが長期間となったため、2018年の入社当時は原則出社であったメルカリも「YOUR CHOICE」という制度を導入するまでに変わっていきました。

現在勤めているカウシェでも、基本的に在宅勤務を続けていますし、入社してからまだ一度も出社していません。在宅勤務における一番の問題はコミュニケーションだと思います。しか、在宅勤務という働き方が、後退して出社するという時代に戻ることはなく、コミュニケーションの問題は今後さまざま方法や技術により緩和されていくと思います。

社会全体が在宅勤務になることはありえませんが、ソフトウェア開発は、その性質上、在宅勤務が可能な領域が多いと思います。コロナが収束しても、おそらく今後もずっと在宅勤務を続けていくだろうと思います。
コメント(0) 

書籍『Core Java for the Impatient, Third Edition』 [本]

Core Java for the Impatient (English Edition)

Core Java for the Impatient (English Edition)

  • 作者: Horstmann, Cay S.
  • 出版社/メーカー: Addison-Wesley Professional
  • 発売日: 2022/09/29
  • メディア: Kindle版

かなり前に注文していたのですが、先日やっと届きました。この本は、Java 17までをカバーしています。Cay S.Horstmannの著書は多くありますが、この「for the Impatient」シリーズの特徴的なのは、章末に豊富な練習問題が含まれることです。簡単な問題もありますが、難しい問題も含まれていることがあります。2014年に出版したJava 8だけを解説した次の本の練習問題と同じものも含まれています。

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)

Javaプログラマーなら習得しておきたい Java SE 8 実践プログラミング (impress top gear)

  • 出版社/メーカー: インプレス
  • 発売日: 2014/09/22
  • メディア: 単行本(ソフトカバー)

Cay S.Horstmannの本でもう一つ特徴的なのは、Acknowledgements(謝辞)に過去の書籍のレビューアも含めて名前が列挙されていることです。『Core Java, 12th Edition』とこの『Core Java for the Impatient, Third Edition』にも私の名前があります。
コメント(0) 

書籍『Building Serverless Applications with Google Cloud Run』 [本]

Building Serverless Applications With Google Cloud Run: A Real-World Guide to Building Production-Ready Services

Building Serverless Applications With Google Cloud Run: A Real-World Guide to Building Production-Ready Services

  • 作者: Venema, Wietse
  • 出版社/メーカー: Oreilly & Associates Inc
  • 発売日: 2020/12/29
  • メディア: ペーパーバック

メルペイでは、GKE(Google Kubernetes Engine)を使ってマイクロサービスを開発していました。カウシェではGoogle Cloud Runを使ってサービスを提供していますので、Cloud Runの概要を学ぶために読んでみました。

160ページと薄い本ですが、Cloud Runの基本的な事柄や注意しなければならない事柄を説明しています。また、ハンズオン形式で進めながら動作を確認できるようになっています。
コメント(0) 

第6期『Effective Java 第3版』研修を行います [プログラミング言語Java教育]

Effective Java 第3版

Effective Java 第3版

  • 出版社/メーカー: 丸善出版
  • 発売日: 2021/07/13
  • メディア: Kindle版

2021年は研修を行わなかったのですが、今年は、『Effective Java 第3版』研修をリクルート社向けにオンラインで開催します。過去の研修の反省から、今回は受講生の条件を絞っています。条件と言っても、以下のように当たり前のことです。
Javaでの開発経験があること
『Effective Java 第3版』は、初心者向けの本ではありませんので、この条件を付けなくてもよいように思われると思います。しかし、過去には、経験がない人が申し込まれていたというのがあり、今回は明確にしました。

追加条件

研修では『Effective Java 第3版』を6回に分けて、毎回指定された範囲を読んで予習してもらいます。そして、不明点をGoogle Driveで共有されている質問表に事前に記入してもらいます。今回の研修では、さらに以下の条件を付けることにしました。
  • 毎回、質問は最低3つは記入する
  • 全く質問がない場合、内容を全部理解できたとみなし、受講の必要性がないと判断し、受講資格を失う
二つ目の条件は、富士ゼロックス情報システム時代(2000年〜2009年)に行っていたJava言語研修では、実際に適用していました。ただし、その頃は、事前にその条件を提示していなかったので、実際、研修の1回目でクビと言われた受講生も多かったです。今回は、事前に提示しているので、クビになる受講生はいないと思います。

技術書は、何となく分かったような気がして読み進めてしまうことがあります。しかし、実際に説明してくださいと言われて初めて、自分が理解していないことに気づくことが多いです。その意味で、予習段階で本当に理解しているのかを自問しながら読んでもらいたいので、上記の条件を明示的に課すことにしました。
コメント(0) 

今日から8社目 [プログラマー現役続行]

今日(10月1日)から、私にとって8社目となる新たな会社で働き始めます。ただ、今日は土曜日なので、実際には3日(月)からとなります。

1978年4月に、当時としては全国でも数少ない情報工学科(九州工業大学)に入学してから、すでに44年が過ぎました。高校生のときに、なぜ情報工学科を選択したのかあまり覚えていませんが、一般家庭の多くに電卓さえなく、コンピュータに触ったことがない人がほとんどだった時代でしたので、コンピュータを学びたいと思ったのかもしれません。当時、情報工学を提供しているのは、九州では、九州大学と九州工業大学だけでした。私は、情報工学科の第8期生だったと思いますので、九州工業大学では早くから情報工学科があったことになります。
※ 現在は、当時なかった飯塚キャンパスに情報工学部があり、戸畑キャンパスの工学部には情報工学科はありません。

大学生の頃、60歳過ぎまでソフトウェア開発に従事しているとは想像できませんでした。社会人になっても、多くの同期が30歳過ぎぐらいにはソフトウェアを開発しなくなっていく中で、私自身はソフトウェア開発を続けていたいと思っていました。36歳で最初の転職をしたのですが、その後は、実際にソフトウェア開発をしたり、管理職をしたり、あるいはプレイングマネージャとして両方を行ったりしてきました。

メルペイでは、一人のソフトウェアエンジニアとして4年4か月働きました。Covid-19により、2020年2月18日から在宅勤務となり、その後は昨日(9月30日)の退職日を含めて2回しか出社していません。そして、この間に、世の中の働き方が変わり、フルリモートで働くことが可能な会社が増えました。

今後も在宅勤務で働きながらソフトウェア開発を続けることになります。今の時代は、通勤することなく、どこからでも、何歳までもソフトウェア開発を続けることが可能になったとも言えます。私自身は、正直なところ、何歳まで働くのか分からないですが、いつまでもソフトウェア開発を楽しめるように健康でいたいと思っています。

「で、どこの会社で働くの?」・・・来週金曜日までには、おそらくアナウンスします。
コメント(0) 

外部発信よりも内部共有・実践 [プログラマー現役続行]

エンジニアが集まって、LTを行ったり、20分から30分程度の発表を平日の夜に行うというのは、いつ頃から広まっているのか定かではありませんが、この10年間で確実に広まってきています。さらに、コロナ禍により、オンライン開催も加わり、広く行われるようになりました。

一方、Advent Calendarといったtech blog(技術文書)を公開することも多く行われています。企業内の開発で得た知見を、オンラインで説明しながら話したり、tech blogとして公開することは、今日のIT業界では、当たり前のように行われています。これらは、すべて外部へ向けての発信です。

外部発信することで、その企業の技術力を発信することにもなり、エンジニアを惹き付けることにもなります。私自身もTech Talkで話をしたり、tech blogを書いてきました。このような情報発信は、今後も多くのIT企業やスタートアップで行われていくと思いますし、ソフトウェア業界で知見を共有する上でとても有益だと思います。

このような情報発信を外部から見てみると、発信されている知見がその企業で広く共有され、ベストプラクティスと思われるようなことは、その企業内で広く実践されていると思いがちだと思います。しかし、本当にそうなっているのでしょうか?

多くのIT企業やスタートアップでの情報発信は、「外部へ発信」することが目的であり、「知見を社内で共有する」ことは目的ではなかったりするのではないでしょうか。得られた知見やベストプラクティスなどは、外部へ発信するのではなく、内部で共有して実践することが、企業にとっては本来優先順位が高くあるべきだと思います。その上で、外部発信することで、業界全体へ貢献することになります。

おそらく、このような状況になるのは、外部への発信を促進する責任を持つチームやグループが組織内にはあるけど、内部での共有や実践を促進することに責任を持つチームやグループが存在しないからではないでしょうか。あるいは、個々のエンジニアにとって、そのような活動をすることが責務ではないからかもしれません。あるいは、一人のエンジニアとして強く推進するのにはかなりの努力が必要な場合があるからかもしれません。

組織として何らかの活動をしないと、さまざまな知見やベストプラクティスが、属人化したものとなってしまい、たとえそれらが外部へ積極的に発信されていていも、組織内で広く共有されいなかったり、実践されていなかったりするのではないでしょうか。
コメント(0) 

株式会社メルペイを退職します [転職]

2018年6月1日から働き始めた株式会社メルペイを9月30日付けで退職します。4年4か月勤務したことになります。1984年4月1日に社会人として富士ゼロックスで働き始めてから、7社目の会社でした。10月1日からは、新たな会社でソフトウェアエンジニアとして働き始めます。

週4日勤務

ソラミツ株式会社を退職します」でも書きましたが、リコーを退職してからは、基本的に週4日勤務をしてきました。メルペイでも、金曜日は欠勤するか有給休暇を使うなどして、週4日勤務をしてきました(週4日勤務で働くことに関して、入社前に合意してもらっていました)。10月からの会社では、週4日勤務の雇用契約で働きます。

初めてのウェブサービス開発

富士ゼロックス、富士ゼロックス情報システム、リコーの3社で合計31年7か月を過ごし、富士ゼロックスでのワークショテーション開発を除くと、その多くは、デジタル複合機のソフトウェア開発に従事してました。ウェブサービス開発に従事するのは、(gRPCの経験は、前のソラミツで多少は経験していましたが)メルペイがほぼ最初と言ってもよい状態でした。

メルペイでは私が入社した時点で、すでにマイクロサービスをGo言語で開発していました。私自身は、Go 1がリリースされるより前の2010年夏からGo言語を学んでおり、メルペイへ入社した時点で、次の2冊のGo言語に関する翻訳本を出していました。

プログラミング言語Goフレーズブック

プログラミング言語Goフレーズブック

  • 出版社/メーカー: ピアソン桐原
  • 発売日: 2012/10/04
  • メディア: 単行本(ソフトカバー)

プログラミング言語Go

プログラミング言語Go

  • 出版社/メーカー: 丸善出版
  • 発売日: 2021/07/13
  • メディア: Kindle版


Go言語に関しては特に問題はなかったのですが、それ以外の使っている技術やサービスは初めて触れる物がほとんどでした。

最初に担当したマイクロサービス

最初に担当したマイクロサービスは、「加盟店様向けの管理画面」用のAPIマイクロサービスでした。管理画面の仕様に対して、バックエンドのAPIマイクロサービスがどのような機能を提供すれば仕様を実現できるかと検討しながら、マイクロサービスのAPI仕様を.protoファイルにコメントとして記述して、API仕様を策定する作業を2か月ほど行いました(「gRPCを用いたマイクロサービスのAPI仕様の記述」)。

最初の仕様が確定してから、マイクロサービスをどうやってテストするのかを検討しました。正直、ウェブサービスが初めてで、マイクロサービスも初めてでしたので、どのようにテストするのが標準的なのか全く知らない状態で、テスト方法を検討しました。

その結果、gRPCのエンドポイントを呼び出して、マイクロサービスの本番コードをほぼそのまま起動して、手元のMacBook Proでテストできるテストフレームワークを考案しました。正直、その時点で、メルペイ内の他のマイクロサービスがどのようにして、gRPCのエンドポイントを呼び出してテストしているのかはほとんど知りませんでした。

フレームワークの実装が終わったら、gRPCのエンドポイントを順にテストファーストで開発していきました。この時の経験をGDG Dev Fest Tokyo 2019で話をしました。その後、同じ話をいくつかのカンファレンスで話したのですが、最後は、Mercari Gearsとして動画(およびテキスト)にしてもらいました(merpay マイクロサービスの開発とテストファースト/テスト駆動開発)。

私が考案したマイクロサービスのテストフレームワークは、後に独立したリポジトリとして共通ライブラリとして私自身で整備し、現在では、採用しているマイクロサービスが増えています。

他のマイクロサービスチームへの異動

その後、いくつかのチームを異動して、2020年7月からは「メルペイスマート払い」に関連するマイクロサービスチームへ異動しました。このチームでは、私自身で何らかのビジネスロジックを実装することはほとんど行っていません。しかし、行った作業の中でも印象的なのは、「テストの安定化」です。

異動してきた時点で、そのマイクロサービスの自動テストは安定しておらず、かなりflakyなテスト群となっていました。テストを安定させるために、何が問題なのかを一つずつ調べて修正していきました。その際に、問題点を洗い出すための用いた手法が、「長時間ランニングテスト」です(「長時間ランニングテストの勧め 〜開発用ノートPCの活用〜」「(続)長時間ランニングテストの勧め 〜開発用ノートPCの活用〜」)。

長時間ランニングテストは、私自身にとっては、目新しい手法ではなく、2003年からずっと行ってきた手法です(「マルチスレッドプログラミングにおける重要な4要件」)。基本的に、この長時間ランニングテストは、ずっと続けてきました。

テストが安定化した後に、問題になったのは、テスト時間でした。そのため、t.Parallel()を呼び出したら並列に動作しないテストコードを一つずつ修正して、できる限り並列に実行するようにしました。そのときの知見をまとめたのが、「Go言語でのテストの並列化 〜t.Parallel()メソッドを理解する〜」です。

複業の継続

複業を20年」に書いていますが、週4日勤務というのもあって、メルペイ在籍中も継続して行ってきました。
技術書の翻訳
翻訳本としては、以下の4冊を出版しました。

Effective Java 第3版

Effective Java 第3版

  • 出版社/メーカー: 丸善出版
  • 発売日: 2021/07/13
  • メディア: Kindle版

新世代Javaプログラミングガイド[Java SE 10/11/12/13と言語拡張プロジェクト] (impress top gear)

新世代Javaプログラミングガイド[Java SE 10/11/12/13と言語拡張プロジェクト] (impress top gear)

  • 出版社/メーカー: インプレス
  • 発売日: 2020/03/13
  • メディア: 単行本(ソフトカバー)

スーパーユーザーなら知っておくべきLinuxシステムの仕組み

スーパーユーザーなら知っておくべきLinuxシステムの仕組み

  • 出版社/メーカー: インプレス
  • 発売日: 2022/03/08
  • メディア: 単行本(ソフトカバー)

Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築

Go言語による分散サービス ―信頼性、拡張性、保守性の高いシステムの構築

  • 出版社/メーカー: オライリージャパン
  • 発売日: 2022/08/03
  • メディア: 単行本(ソフトカバー)

技術教育
企業向けの技術教育としては、「Go言語研修」と「Java言語研修」を行ってきました。2020年2月まではオフラインの教育でしたが、それ以降は、オンラインの教育でした。オフラインの教育では、研修後に受講生の人達と懇親会をするのも楽しみでした。また、Go言語研修では、古川陽介さんや和田卓人さんも受講してくれました(「第6期、第7期のGo言語研修が終了しました」)

これから

これからもソフトウェアエンジニアとして働きながら、技術教育や技術書の翻訳、それにオンライン読書会(ブログのPC版で左上に一覧があります)も続けていきたいと思っています。
コメント(0) 
前の10件 | -