石原 拓哉 | Lugendre
媒体 | リンク |
---|---|
GitHub | https://github.com/Lugendre |
Cosense (旧Scrapbox) | https://scrapbox.io/LugendrePublic/ |
Zenn | https://zenn.dev/lugendre |
Qiita (休止中) | https://qiita.com/Lugendre |
X (旧Twitter) | https://x.com/Lugendre |
主に流体解析ソルバの開発に従事。その傍ら、セキュリティ向上の為の施策や各クラウドの管理業務を行う。受託開発ではWebアプリケーションの開発も行った。各ソフトウェア開発では保守性を重視し静的型付けと適切な抽象化を重視した設計と実装をした。
言語・知識
メイン言語。5年以上の実務経験あり。依存型のエミュレートも使って厳格に型をつけることを好んでいる。GHCの拡張を用いた型レベルプログラミングや線形型の利用はもちろん、ある程度は論文とGHCのコードを読んで最適化機構についても把握している。
実務で有限体積法を用いた一般的な流体ソルバを実装している。OpenFOAMに関しても実装の概要とデータ構造は把握してコードを参照している。DNSだけでなく、LES、RANS(k-ε)の実装もした。また、Cavity flowのGhiaの論文やBackstep流れの付着点、Kolmogorovの相似仮説といったベンチーマークも行った。
実務で流体ソルバの一部に有限要素法を用いた計算を導入した。材料のFEMによる解析も実装したことが有る。弾性変形の部分だけであり、弾塑性解析は行ったことがないが、理論の詳細は知っている。
サブ言語。高速で省メモリかつフットプリントの小さめなプログラムが書きたいときに使用している。実務では流体解析のPoCで利用したが、主に趣味で使っている。
サブ言語。Webフロントエンドを書くのに使う。実務ではWebアプリケーションを開発する際に利用した。その際はバックエンドでも利用し、ORMとしてPrismaを利用した。基本的にReactをNext.jsとともに利用している。
サブ言語。CLIツールを作る際に使う。実務ではKubernetesのカスタムコントローラを作る際に利用した。
現在勉強中。Haskellの経験を活かし、Tagless Finalとcats, cats-effectを用いた開発をして設計を勉強している。
実務でWebアプリケーションをホストするのに使った他、全体の管理も行った。主にFargateでコンテナをホストした。他にもCloudFront, S3, Auroraを使っている。 数値計算ではAWS Parallel Clusterを使った。
Zero Trustを主に利用。R2やCloudflare Workersの技術検証目的でアプリケーションを作成している。
職務:研究開発
規模:3名
期間:2019年4月~現在
利用技術:Haskell, Dhall
離散微分形式および有限体積法(FVM)を用いた商用の流体解析ソルバをHaskellで開発した。主にコアの流体解析部分をすべて担当した。数値計算の知識も微分幾何の知識もなかったため、1から勉強し実装した。離散微分形式について、関連論文を読み、不足を補って実装した。流体解析の妥当性も各種検証し、そのフィードバックから修正した。 チームメンバーが3名しかおらずマネージャーもいないため、自らビジネスに必要な機能を判断、実装した。Haskellの強力な型システムと抽象化能力を用い、堅牢で保守性の高い設計と実装を実現した。 FVMではパフォーマンスの検討のためRustを使ったPoCも作成した。
職務:フルスタックエンジニア
規模:2名
期間:2021年4月~2022年7月
利用技術:TypeScript, React, Next.js, Relay, Prisma, PostgresSQL, S3, CloudFront, Fargate, CodePipeline, CDK, MinIO, Keycloak
受託案件として機械学習のための画像へのタグ付けを行うWebアプリケーションを開発した。AWS FargateにDockerコンテナでデプロイし、Code Pipelineを用いてCI/CDできるように環境を整えた。AWSの環境はすべてAWS CDKを用いてGitHubリポジトリ内で管理し、mainの変更が反映されるようにCI/CD環境を整えた。要件としてオンプレでも機能することが求められていたため、認証基盤をKeycloakとし、画像はS3互換のOSSであるMinIOを利用し、Docker Composeで素早く立ち上げられるようにした。 TypeScriptを使う際には適切に型が付くことを意識し、zodを用いて極力静的型付けができる範囲で書くことで保守性を上げた。
職務:クラウドインフラ管理
期間:2021年4月~現在
AWSのユーザー、各種権限、リソースを管理した。複数案件で使うことを考慮し、環境の分離のためにAWS Orgnizationsを使いマルチアカウント運用した。 各ユーザーは踏み台アカウントからのSwitchRoleでのみアクセスできるようにし、セキュリティを担保した。また、SCPによるリソース制限を活用し、不必要なリソースが展開できないように管理した。 加えて、Paralell Clusterを用いたHPCクラスタを構築、管理した。
職務:クラウドインフラ管理
期間:2022年4月~2023年3月
GCPのユーザー、各種権限、リソースを管理した。hpc-toolkitを用いたHPCクラスタを構築、管理した。
職務:インフラ管理
期間:2022年4月~現在
GitHubのユーザー、各種権限、リポジトリの管理をした。GitHub Copilotの使用も進言し、会社の開発スピード向上に貢献した。 mainブランチへのpushの禁止など、各リポジトリで最低限守るべきルールを決定し、機械的にチェックできるようAllstarを導入した。
期間:2020年4月~2020年10月
HPC用途として使えるかの検証のため、オンプレでKubernetesクラスタを構築運用した。HPC用途のため、コンテナランタイムとしてSingularityを用い、kubeflowを用いてOpenMPIを用いた数値計算が行えるかを検証した。 計算終了の通知のために高レベルAPIを用いてカスタムコントローラーを作成した。
簡単にできるセキュリティ向上施策を推進した。各サーバーのSSHをやめ、各種リソースをCloudflare Zero Trustで守るように変更した。アクセスできるメンバーの管理をGitHubのTeam上で管理できるようになり、機動性とセキュリティが向上した。 また、全社にYubikeyによる2FAを行うことを義務付けることで、フィッシングを含む典型的な脆弱性を避けるようにした。
- 社会的に価値のあるプロダクトやサービスを作ることが大事である
- 人の成長がなければサービスと会社の成長もない
- 適切なマネジメントがソフトウェアと人の成長を生む
- ミスや過ちは制度作りで対応するべきである
- 設計と技術はソフトウェアの成長に応じて再検討するべきである
- ソフトウェア開発
- 実際にユーザーが何を求めているかを注視した開発
- Webアプリケーションの一通りの基礎的な設計や実装
- 未知領域のキャッチアップ
- 全くやったことない分野でも勉強し、キャッチアップできる
- 新しいことを学ぶのが好きで全く苦にならない
- 実際に多くのユーザーに使われるWebアプリケーションの開発
- スクラム用いたチーム開発
- ソフトウェアの価値を最大限引き出せるようなマネジメント