History

概要

職業プログラマーとしての職歴や展望を記載する。 kijima

基本的な情報を示す。

   
氏名 貴島 大悟 Kijima Daigo
生年月日 1998-03-28
居住地 東京
最終学歴 鹿児島大学 法文学部
GitHub kijimaD

要約する。

Goを中心としたバックエンド開発を得意とするWebプログラマーである。4年以上の実務経験があり、Webアプリケーションの設計、開発、テスト、運用まで一貫して担当してきた。

技術スタック

メインでバックエンドサーバ開発、サブでフロントエンドやインフラまで業務を行ってきた。今後もバックエンド領域を軸として開発に携わっていこうと考えている。

職務経歴詳細

経歴の全体像を示す。

20240430-history.drawio.svg

Figure 1: 経歴の全体像

会社ごとに、参加したプロジェクトを列挙する。

株式会社リアルグローブ(2022-11 ~ 現在)

   
概要 官公庁向けの地図SaaSの開発
使用技術 Go, React, GitHub Actions, AWS(Lambda, CloudFront, Aurora…)
期間 2024-09 ~ 現在
  • 状況

    地図系SaaSのリリース後、機能追加と保守のフェーズで開発に参画した。

  • 課題

    顧客要件の変更に伴い、権限構造の根本的な改修が必要となった。 稼働中のシステムへの影響を最小限に抑えつつ、将来の権限要件にも対応できる設計が求められた。

  • 行動
    1. ユースケースや背景確認 → 設計 → 作業フロー設計 → 実装 のフローを徹底した。 各ステップでドキュメントを作成しチーム内でこまめにレビュー、共有した。
    2. 設計前に複雑な既存仕様把握のため、先に関係箇所のテスト強化やリファクタリングした。 既存の理解を深めたうえで設計し、バックエンド、フロントエンド、ドキュメントにわたって段階的に実装を進めた。
    3. コードに変更を加える前に関連する箇所のガードレールの整備をおこなった。 既存コードベースへのLinterの段階的な導入、DBスキーマ・OpenAPIドキュメント生成の漏れを検出する仕組みを導入した。 CIで検証し、開発段階で気付けるようにした。
  • 成果
    1. 仕様面での疎通ミス、設計段階での考慮もれ、などの手戻りを最小限にできた。 認識の土台を合わせたうえで、各段階でのディスカッションを有意義に進められた。
    2. 稼働中のサービスに影響を与えることなく、期限内に仕様変更を完了した。変更箇所に起因する本番障害が発生しなかった
    3. 将来的な人為的ミスの防止に貢献した


   
概要 自治体向け3D GIS1の開発
使用技術 Go, Linux, Windows, PostgresQL, Apache, GitHub Actions
期間 2022-12 ~ 2024-10
  • 状況

    測量会社におけるブラウザ・ネイティブ対応の3D GISの新規開発に参画した。

  • 課題
    1. バックエンド機能全般を単独で担当するなかで、短い期間でGIS知識をキャッチアップして設計する必要があった。
    2. 異なる専門領域を持つ、複数の他社チームと合意形成して作業を進める必要があった。
    3. 複数のOS、DBに対応させる必要があった。
  • 行動
    1. プロジェクトの初期でGIS領域を集中的にキャッチアップした。 参考書籍を読み、詳しい担当者に質問することで理解を深めた。
    2. 短くフォーカスした会議を多く設定して接触機会を増やしたり、食事に誘って心理的ハードルを下げた。 GIS領域について学び相手と語彙のラインを揃えるようにした。 OpenAPIを用いたスキーマ駆動開発を提案・導入し、チーム間の仕様策定を円滑化した。
    3. DBやOSを交換可能なアプリケーション・テスト構成とした。 CIで各組み合わせでの挙動を検証した。
  • 成果
    1. 会議において、ユースケース部分から目線を揃えてディスカッションできた。 得られたGIS知識により、変わりやすい部分を想定した設計ができた。
    2. お互いの強みや役割を理解して早めに相談でき、問題解決に協力して取り組む土台となった。
    3. 開発段階でDBの微妙な差異や標準SQLのサポート範囲の違いを検知し、影響が少ない段階で修正できた。

総評。

遅延のない顧客への納品に貢献した。担当したバックエンド領域において、納品後の不具合や障害が発生しなかった。Web技術の知見を活かしてチームをリードした。

株式会社資格スクエア/株式会社サイトビジット(2020-10 ~ 2022-08)

⚠ 所属会社は変わっているが、会社分割による移籍であり、業務内容は変わっていない。

   
概要 難関資格取得をサポートする資格教育サービスの開発
使用技術 Ruby on Rails, ECS, EC2, GitHub Actions
期間 2021-12 ~ 2022-08
  • 状況
    • サービス開始から数年が経過しており、後発の競合サービスの台頭によってプロダクトの陳腐化が進んでいた
  • 課題
    • ビジネスの巻き返しを図るためには新機能の開発やUIの刷新が不可欠だったが、長期の技術的負債の蓄積や開発環境の未整備がボトルネックとなり難しい状況が続いていた
  • 行動
    1. 事業の開発競争力を向上させるため、開発基盤の刷新を主導した。 開発環境をDocker化し、誰でも迅速に同じ環境で開発できるようにした。 サービス開始以来EC2で稼働していた本番サービスを、ダウンタイムなしでECSへ移行した。 CI/CD、ログ機構を含めて更新した。
    2. テストの「部長」として業務の一定割合をコード品質強化に割り当てた。 テスト追加とコード削除し、バックエンドサーバ全体のカバレッジ率を78%→90%に向上させた。 カバレッジ率を定期的にアナウンスしたりPRごとに変化を通知させたり、ペアプロでメンバーがテストを作成するのを助けた。 本番環境に使われていない行数を特定する機構を導入し、根拠を持って削除提案できるようにした。 関係者へのヒアリングと提案を経て、大量のコードを削除した。
  • 成果
    1. 一連のコンテナ化により全環境において環境差異がなくなったことで、開発段階で気付ける率が高くなり安全性が向上した。 複数環境のミドルウェアや言語処理系のバージョンを維持する工数をなくし、より価値を生み出す作業へ集中できるようになった。
    2. 社内のコードのコスト/品質意識が向上した。 チームのテスト意識が向上し、PRではテストが必ず含まれるようになり安全性、メンテナンス性が向上した。 コード削除により見通しがよくなり認知コストや無意味なコード投資リスクが減った。

RAQ

キャリアをどう考えているか

将来的にどういったキャリアを考えているかを示す。

  • MUST プログラマー(専門職)

    コードを書いたり設計したりすることが、自身の根源的なモチベーションである。 個人やチーム、会社にこの情熱を活かしたいと考えている。

  • SHOULD バックエンドプログラマー

    ビジネスの根幹を支えるバックエンド領域に専門性を持ち、知見を元にアーキテクチャ設計であったり技術選定をリードしていきたいと考えている。 課題解決のため、必要に応じてフロントエンド、インフラも担当する。

さらに、目指す方向性は「テックリード」を考えている。根拠を示す。

これまでの経験や感情から、目指す姿は2つの要素で構成される。

  1. 大きな範囲の責任を持てるレベルの技術力:

    プロダクトや事業を熟知し、長期的かつ広い視点で技術選定やアーキテクチャ設計できる。コードの品質を高く保てる。これらによってプロダクトに強い競争力をもたせられる。

  2. チームへ貢献できる:

    開発プロセスの改善やチームメンバーの技術的な成長を支援し、チーム全体のアウトプットを向上させられる。

これらにもっとも近い職務の類型は「テックリード」だと考えている。必要な能力を分解して列挙する。現時点では満たしていない。

  • 高い設計・プログラミング能力

    時間・空間的に広い領域を考慮して設計する能力。複数の選択肢を挙げられ、要件に合わせて最適な方法を選ぶ能力。

  • ビジネス知識

    ビジネスの視点から技術的優先度に変換する能力。

  • コミュニケーション能力

    技術的制約を関係者に平易に説明する能力。

会社選びの軸は何か

業界。

業界よりも、難易度の高い技術課題に関われることを重視している。不動産、金融など生活に身近な分野へ興味があるが、それに限らず課題ベースで検討している。


会社。

  • MUST 開発経験を活かせる
    • いままでの業務経験を活かせること。成果を安定して出せる可能性が高いため
    • ベースは経験を活かしつつ、積極的に未知の分野にも挑戦していきたい
  • MUST 会社として優れた技術力がある
    • 例: 技術ブログでの情報発信が活発、OSSへの貢献者が在籍、カンファレンスでの登壇実績など
    • ナレッジを共有する文化や体制があると貢献しやすい。自分が新しいことを得やすい
  • SHOULD 大規模システム
    • 今までは少人数チームでの開発が主だった。守備範囲の広さや自走力を活かしつつ、異なる経験を積みたいと考えている。また、大規模システム特有の課題(高アクセス、スケーリング)に取り組みたいと考えている

プライベートの興味・関心

プライベートの、興味の方向性を示す。現実でやっている仕事と100%一致しているわけではない。

  • 低レイヤの知識が必要な領域

    コンピュータに関する疑問を出発点としていくつか学んでおり、おもしろさを感じている。これを仕事に活かしたいと考えている。コンピュータに関する知識は、根本のアイデアはとてもシンプルなことが多く見える。理解できたときに嬉しさと美しさを感じる。また、知的好奇心を満たしてくれるのとともに、アプリケーションレベルの問題解決に役立てることができる。直感的でない挙動を理解したり、あるいは応用可能な強力な基礎となって設計や実装に役立てることができる。あくまでアプリケーションを作るうえでの武器にしたい、そういう知識が必要になるアプリケーションを作りたいということで、低レイヤそのものを仕事にしたいのとは微妙に異なる(能力も足りていない)。

  • 自分で使うツールを作る

    プログラマーが使うツールやライブラリの開発に興味を持ち、知識を深めている。たとえば、Linter/プログラミング言語/CI/Emacsプラグイン…などがある。余暇にいくつかのツールを開発しているが、ほとんどのケースは自分が必要にかられたことをモチベーションとして開発した。Web開発者としても、プログラマーがターゲットになっている、ドッグフーディングできるようなサービスに参画できるのがベストだろうと考えている。

パフォーマンスを最大化できる環境

開発効率を高めるために、希望している環境。

  • SHOULD 普段から使い慣れているLinuxベースのマシンで開発できること(ディスプレイマネージャをEXWMに設定できること)
  • SHOULD 集中しやすい静かな環境での作業と、チームとの対面コミュニケーションのバランスを取るため、週1~2回の出社頻度であること(フルリモートではないこと)

OSS活動

プライベート年表

趣味的なものを含む年表。

2025年

  • 自作RPG ruinsの機能追加した
    • 戦闘システムを追加した
  • トレーディングカード風画像ジェネレーターtcgを作成した
  • na2meを拡張した
    • タグを機械的に追加する機能を追加した
    • 画像を共通のサイズへ切り出し・フィルタ処理をかけられるようにした。背景画像の準備を楽にした
    • 夏目漱石以外のほかの本も追加した
    • しおり機能を追加した。ファイル/ローカルストレージによって永続化する
  • 長期休暇を取り1ヶ月アメリカを旅した
    • ロサンゼルス → ラスベガス → サンフランシスコ → シカゴ → ナイアガラ(アメリカ) → ナイアガラ(カナダ) → ニューヨーク
  • ブラウザで動くバイナリビューワbviewを作成した
  • 静的サイトジェネレータ型RSSビューワplanetizerを作成した

2024年

  • ElectronとGoでRSSフィードビューワsquallを作成した
  • ローカル用のPDFビューワshelfを作成した
  • 自作ローグライクRPGの機能追加した
    • 吉里吉里Zライクなシンタックスで記述できるメッセージシステムを追加した
    • インベントリシステム(使用、装備、取得、廃棄)を追加した
    • フィールド上を移動できるようにした
  • X Window System用のスクリーンルーラーxrulerを作った
  • ノベルゲームエンジンnovaを作成した
  • 自作ノベルゲームエンジンで夏目漱石の作品を記述したna2meを作った

2023年

  • GitHub Actionsライクなシンタックスで書けるタスクランナーgorunを作成した
  • CLIでパズルゲームの倉庫番を楽しめるsokobanをスクラッチで作成した
  • OpenAPIバリデーションツールoavを作成した
  • ミニマルなCPUエミュレータminicpuを作成した。本を参考に、Goで書き直した
  • nand2tetrisのアセンブラをGoで書いた
  • 高速な通知ビューワgarbanzoを作成した
  • 手作りのWebサーバgsrvを作成した
  • 環境構築スクリプトをGoで書き直して、共通部分をライブラリ化した(silver)
  • Gitタグを元にファイルに記載されたバージョンを書き換えるコマンドラインツールcarveを作成した
  • Goのアセンブリコードを出力するorg-babel拡張ob-go-asmを作成した
  • tinyfilemanagerにファイルアップロードするコマンドラインツールuplを作成した
    • ブラウザでのアップロードが制限されている特殊環境で、Tiny File ManagerがAPIリクエスト非対応だったため作成した…

2022年

  • このサイトの開発環境・自動テスト・デプロイをDockerコンテナで行うようにした(ビルドがEmacs, Ruby, Python, sqliteに依存する)。本番環境のGitHub Pagesへの展開と、ステージング用のHerokuへのコンテナデプロイ
  • リポジトリの更新されていないファイルをコメントするGitHub ActionsStaleFileを作成した。GitHub Marketplaceで公開した
  • パーマリンクからコードを展開するEmacs拡張ob-git-permalinkを作成してMelpaに投稿し、マージされた。
  • ローグライクdigger_rsの作成(WIP)
  • 自分用にカスタマイズしたUbuntuのisoイメージを作成した。USBに焼いて、すぐ自分用のクリーンな環境のマシンを作れるようになった
  • 設定ファイルからgit管理してgit cloneを行えるgcloneを作成した
  • GitHubの活動統計をとるactを作成した
  • actを使ってリポジトリに情報を蓄積するcentralを作成した
  • GitHubの言語の色に基づいたSVGバッジを生成するmaruを作成した
  • ライフゲームwebアプリgolifeを作成した
  • GitHubのコードレビュー返信ツールgarを作成した
  • Emacsの設定ファイルを文書化した

2021年

2020年

2019年

2018年

  • 村上龍にハマり、彼のすべての小説、エッセイを読んだ。

2017年

  • WordPressでサイトを運営していた。

2016年

  • 鹿児島大学(法文学部/経済情報学科)に入学した。
  • 北京の清華大学に語学留学した(半年間)。

2015年

  • Linuxに出会い、メインOSとして使いはじめた(以後ずっと)。
  • Emacsと出会い、学びはじめた。(きっかけは図書館にあったPerlの本で推していたこと)

References

Backlinks

Footnotes:

1

地理情報システム(Geographic Information System)。 地図を表示し、その上に付加的な情報を表示したり編集したりできるアプリケーション。