喋らなかったことがたくさんあります

先ごろMENTA代表入江様とのインタビュー動画が公開されました。28分という長い動画で目一杯喋ったのですが、入江様より事前にいただいていた9つの質問トピックのうち2つしか喋っていません。全然時間が足りませんでした。

そこで、今回のナレッジでは残りの7つの質問について、簡単にお答えしようかと思います。

なお、本番でお話した内容は次の2点です。

  • 現在どのような仕事をしているか
  • どうやって新しい技術をキャッチアップしているか

残りのトピック

1日のルーティンを教えてください。

このトピックは、大前提として

  • 常時、軽〜中程度のめまいを感じる持病を抱えている(常時メニエール症候群と言えるのかも)
  • 椎間板ヘルニア、ぎっくり腰、膝の軽度障害(棚障害)も抱えている
  • 持病が原因で解雇されてフリーランスになった

という事実があることをご理解ください。決してグータラしているわけではありません。

  • 正午ごろに起床(午前中は目眩が強くてなかなか起きられない)
  • 夕方(16時ごろ)まで案件の作業、MENTAでのメンタリングの準備などを行う
  • 近所のスーパーに買い物に出かけ、夕食を作り、食べる。20時ごろまで。
  • 20時から23時まではほぼ毎日メンタリングが入っているので、メンタリングの対応
  • 23時から眠くなるまでは自由時間。興味を持ったことの調べ物や、speedrunの練習。

といった感じでルーティンを回しています。

仕事をしていることで意識をしていること

三方よし

三方よしとは

  • 売り手
  • 買い手
  • 世間

の3つの方向に信頼してもらえるように行動して商売するという近江商人の哲学が発祥と聞いております。
私は、この「三方よし」を、

  • エンドユーザー(実際にソフトウェア・システムを使う人)
  • オペレーター(ソフトウェア、システムを管理・運用する人)
  • デベロッパー(ソフトウェア・システムを開発する人、つまり自分たち)

と考え、ソフトウェア開発を行うことを意識しています。

エンドユーザーの良し

これは「実際にソフトウェアやシステムを利用する上で使いやすい、わかりやすい、習熟に高度な知識を要求しない」というようなUI/UXをなるべく実現させることを意味しています。
利用者全員が100%満足させることはできませんが、なるべく現場の意見を尊重してUIづくりを行うように心がけています。
つまり、エンドユーザーの人間とコミュニケーションできることが条件となり、そうでない開発現場は私は好みません。

オペレーターの良し

システムを実際に管理・保守するのはオペレーター(システム運用者)のお仕事です。管理業務が行いやすいようないろいろな仕組み、工夫を管理機能に取り入れることでオペレーターの負担を軽減させてあげたい、という思いから日々いろんなことを考えています。

  • トラブル発生時のログ取りが楽
  • バッチのリランが楽
  • 人間の決済が必要ない処理はできるだけ自動化

全てを自動化できるわけではなく、トラブル発生時はどうしても人の目で確認作業を行わなければならないことがあります。その時も事後処理がなるべく楽になるよう管理機能に(予算や時間の範囲内で許されれば)工夫を凝らしたいのです。

デベロッパーの良し

これは「開発のしやすさ」の一言に尽きます。自分だけでなくチームで開発している場合は技術レベルもまちまちです。他のメンバーの作業が楽になるよう、私の方で中間層のミドルウェアを作ったり、自動テストやドライバ(ここでは他システム連携においてダミーの応答を返すAPI等を指します)を作ったり。自分だけでの開発の場合は設計書からソースコードを(半)自動的に生成するジェネレーターを作ったり(特にDB設計書→モデルやエンティティ、DAOを生成する仕組みを作ることがよくあります)と、いかに自分の手間暇を削減するかを先に考えることで、後の作業負荷の軽減を図ります。

また、開発環境の構築には手抜かりをしないようにしています。開発環境の構築方法は必ず再現可能な手順をドキュメントなりWikiなりに残し、自分が急にいなくなっても他の誰かが引き継げるよう開発手順や管理作業の整理を行なっています。
実際、とある案件でプロジェクトリーダーをやっている最中にやんごとなき事情により急に退職をしたことがありました。その際、残しておいたドキュメントとRedmineのWikiのおかげで「引き継ぎ作業なし」を実現することができました。状況を鑑みて多少の遠慮はあったと思いますが、引き継ぎゼロを実現できたのは大きかったと思います。

自分なりの効率化テクニック

上記「三方よし」のデベロッパーの項目とオーバーラップしていますが、設計書からソースコードを生成するジェネレーターを案件ごとに作成することが多いです。
なぜ案件ごとに作成するのか? それは案件ごとに設計書の様式が異なるからです。私が経験した仕事はウォーターフォール開発で、要件定義が終わって設計の作業から担当することが多かったのですが要件定義の段階でデータベース設計はだいたい固まっています(要件定義は発注者が行うことがほとんどの現場でした)。毎回全く同じフォーマットでデータベース設計書が出てくることがないので、様式に合わせて毎回カスタマイズする必要があります。ジェネレーターはExcelで作ります。というのも、ExcelのようなOfficeソフトであればどのような現場でも支給されるPCに入っているからです。現場によってはあらかじめ用意されたソフトウェア以外使用禁止のような厳しいところもあるので、「そのあたりであるものでツールを作成できる」テクニックは大変役に立つのです。

もう一つ、よく実施していた効率化は「業務日誌アプリの作成」です。会社員時代はSES派遣の業務も多く、粒度は現場によりけりですが日々の作業内容と作業時間を項目別に積算して日報や月報を書く必要があるところが大半でした。これに対し、1日のタイムラインを模した列に作業内容を書いていけば自動的に作業内容と作業時間が集計されるアプリを作成することがSES初日の業務になりました。おおまかな作りは全現場同じで、必要に応じて集計内容、書式を現場ごとにカスタマイズするもので、これもExcelで作っていました。理由は前述の通り、どの現場のPCにもExcelくらいはインストールされているからです。

チームで開発作業を行っている場合の効率化は、みんなが遵守できる効率化ルールを作成することでした。素晴らしい効率化テクニックがあっても、技術レベルがついていかない高度な内容ではチーム全体に浸透しません。チーム内のレベル差などを勘案して、みんなが等しく楽になる効率化を考えていくのも私の会社員時代のミッションであり、楽しく感じる作業でもありました。

当時の私の上司は、このような細かい効率化や他メンバーの作業を助ける基礎部分の作成作業を「耕運機」と呼んでいました。私が地を耕して均すことで他のメンバーが花咲ける、という意味の褒め言葉だったのですが、せめて「開拓者」と呼んでほしいなぁと思っていました。

よく使うツール等を教えてください

前述の通り、会社員時代の私は大抵「Excelでなんでもやっちゃう」のであまり便利なツールには関心がありませんでした。
会社を退職し、フリーランスを始めてからはツールに対して自由が効くようになり、いろいろなツールを試してみています。

PowerToys

Windows限定ですが、Microsoftが提供しているWindowsを拡張する形での効率化ツール群の総称です。

  • 画像を一括で縮小できるImageResizer
  • 正規表現を使ってファイル名を一括変更できるPowerRename

は頻繁に使っています。そのほかにも便利機能がたくさんあり重宝しています。

Affinity Designer 2

言うなれば廉価版Adobe Photoshop & Illustrator といった画像ソフトです。ドローレイヤーとペイントレイヤーが分かれていてそれぞれの作業を1つのワークスペースで行えます。画像系フリーソフトとしてはGIMPやInkspaceといったものもありますがAffinity Designer はこのフリーソフトの使い勝手を遥かに凌駕し、Adobe系ソフトの操作感に近いのでAdobe CC のサブスクは高価でなかなか手がでないと思う人にはお勧めできるかと思います。なおpsdファイルやaiファイルの読み込みはできますが書き出しはできないので、psdファイルやaiファイルで納品する必要がある仕事の人には向きません。
24,000円(税別)でWindows,Mac,iPadの3プラットフォームに対応するライセンスを購入できます。サブスクではなく買い切りでこのお値段。とてもリーズナブルです。

背景切り抜きツール

最後に画像の背景切り抜きツールを紹介します。といっても、特別なツールの導入は必要ありません。昨今はOS標準レベルで背景切り抜きツールが存在します。

  • Windowsであれば、Officeソフトに標準搭載されています。
  • Macであれば、プレビューアプリで背景の切り抜きができます。
  • iPhoneでさえ写真アプリで背景切り抜きができます。

いずれも切り抜きできる範囲は自動決定というデメリットはありますが精度は非常に高いと思います。外部ツールで背景切り抜きを行っている方、ぜひOS標準機能の背景切り抜き機能も使ってみてください。

現在、どのような技術に興味がありますか

1つはみなさんも興味津々のChatGPTですね。きちんと利点、欠点を理解した上で使用するのであれば最強のサポートツールになるでしょう。ただし、現在世界中の誰もが「ChatGPTに振り回されている」状況だと思います。ChatGPTだけでプログラミングや業務がこなせる時代になるのはまだまだ先だと思います。
現状、ChatGPTに適切な出力をさせるには、「適切な質問」を利用者側が作ってあげないといけません。その適切な質問を作れるかどうかはやっぱり技術的、業務的な経験がモノを言う状況なので、ChatGPTがプログラミング初心者にとって助けとなるツールになるかどうかといえば答えは否で、今できる人とできていない人の格差がさらに広がるだけの結果にしかなっていません(少なくとも現状は)。今後どのような方向に学習が進んでいくかは非常に興味があります。

ChatGPTが世に出てくるまではIoT技術の方面にも興味がありました。Bluetoothに代表される無線通信、RaspberryPiなどの小型PCやマイコンを組み合わせていろんな問題解決ができないかを考えることも好きです。例えばこれはあるメンティーさんと共同で作業したのですが、ラズパイにWebカメラを4つつけて、Pythonで画像を送信するWebサーバーを立てるお手軽全方位監視カメラを作ってみたことがあります。今はラズパイ自体が高騰しているので手軽にはできませんが、1万円もかけずに4方向同時監視ができる監視カメラができます。この監視カメラを実現するためいろいろなテクニックを調査しました。そういった作業も楽しいですね。

これまでを振り返ってターニングポイントだったエピソードを教えてください

ターニングポイントはいっぱいあったけど、一番大きいポイントは大学院を中退したことです。
学術研究に興味が持てなくて学校に行かなくなりました。そもそも大学院に進学した動機が「院卒の方が初任給が高い」からであり、研究という行為そのものに興味がなかったのがいちばんの原因だと思っています。
大学院で半ニート生活をしている際、オンラインゲームで知り合った在京エンジニアの方の紹介でアルバイトからプログラマー業務に入りました。「実際にユーザーに使われるモノ」を生産してフィードバックを受けることが楽しく、またものづくりを通じて学ぶことが自分にとって最適な勉強法だったと気づきました。前述の通り大学院に進学した理由は初任給の高さで、これでは修士課程の2年ですらモチベーションが保てなかったのです。

この業界は金銭だけでは長らくモチベーションが続かないと思っています。短期的に稼ぎたいのであれば他に適した職業があり、少々肉体的に辛くてもそちらの方が良いかもしれません。就職相談にくるメンティーさんにもお話を聞きながら適性、素養を考えつつ就職・転職先はITエンジニア一辺倒ではないよというアドバイスも行なっています。

以前のナレッジ記事でものづくりのモチベーションに関わった出来事をいくつか紹介しています。よろしければ読んでみてください。

今後目指していることは?

個人の目標としては

  • 自分自身に無理のない範囲で活動すること。
  • ストレスで体を壊した経験があるのでなるべく心身にストレスをかけないように仕事すること。

また、ITエンジニアを目指している若い人にいろいろなことを教えることで、ものづくりに関心を持ってもらって、今後世の中で活躍していってほしいと考えています。その手伝いがメンタリングを通して出来るのであれば本望かなと思っています。

(了)