仕事でRust使ったぞ!
こんな要件の仕事があった。時間もあり、誰かに個人で実行して取得するだけのため、誰かにRVしてもらうこともないので、「よし、Rust」で作ったろ!ってことで、Rustで作りました。
ちなみに、職場はPython or PHP or C++ぐらいしか扱っていなく、これ以外の言語について、アレルギーがすごい。この言語以外だと、問題になるぐらい(どうなってんねん)
- DBから過去2年間のレコードを抽出
- 件数は一ヶ月、約7万レコードで、ファイル出力
- 実行サーバーのOSはCentOS7
- SQLの結果で条件分岐処理が多数発生するため、SQLのみではほぼ難しい
- サーバーにPythonはインストールされている
Pythonで作ることもできたが、このプロジェクトはクローズするため、Pythonを使いたくなかった。Pythonのバージョンも古く、同じバージョンを例えばLambdaで動かそうにも存在しなかったり、同じ環境をローカルに用意するのが大変なので。
という背景から、メモリ効率が良く、クロスコンパイルでどの環境でも実行できる言語、、、そうRustがええやん!ってことに自分の中でなりました。今の職場でRust使うことなんてないやろうなって思ってたけど、やろうと思えば、できるもんやな。
一つの実績として、積み上げることができたので、よかった!
ワールドトリガー28巻を読んで
漫画は子供の頃から読んでおり、数年前からビッコマも利用し、朝ご飯を食べながら漫画を読むのが毎日の日課になっている。特にお気に入りの漫画は単行本で購入し、単行本を買うほどでもないが紙で読みたい本はゲオでレンタルして読んでる。ゲオでもレンタルできないもはビッコマで読んでいる、という感じだ。
ワールドトリガーはゲオでレンタルして読んでる漫画になる。大好きな漫画だが、あなんでもかんでも本を買ってしまうと置き場所がないので、泣く泣くレンタルして読んでいるわけである。
さて、ワールドトリガー28巻だが、こうしてブログとして書きたくなるような巻だった(特に後半)。レンタルのため、発売よりも一ヶ月以上、遅く読んでおり、SNSではこの巻について、語り尽くされた(つぶやかれたり)状態だろうと思うが、それでも突き刺さる内容だった。
読んだ方ならおわかりの若村の話である。
彼は自分の成長のため、ヒュースにアドバイスを求めたことで、自分の実力について、現実を知ることになる。このやりとりが大人としては考えさせられる内容だった。
そう、自分に思い当たる節がある内容だった。自分なりに成長のためにしていたことがそうでもなかった。実はできると思っていたなどだ。
読めば誰しも思い当たる事がある内容ではないだろうか。おそらく成長したいと思ってる人が読めば突き刺さると思う。
ここで成長のための学びがこの巻にはある。
そう「刻む」だ。
本では、次のステップに進むために壁が乗り越えられないのであれば、細かくステップわけて、刻むのだ、とある。そう「刻む」のだ。とてもよい考え方だと思った。
エンジニアとして、一般的にランクをつけることは難しいと思っている。つまり、今自分がどのランクにいて、次のランクになるために何をすべきか?というのは明確にしずらい(どの職種もそうかも知れない)。それでもとにかく小さいことから刻みステップアップするしかないのだ。それをワールドトリガー28巻から学んだ。
最新の技術書 クラウドアプリケーション10の設計原則+AWS設計スキルアップガイドを読んでみた
最新の技術書読んでみたシリーズ第2弾
経緯
仕事でAWSのマネージメントサービスを全面に使ってサーバーレスアプリケーションを構築する設計をするために、基本的なことを理解、しっかりとした設計がわかっている状態になるように、購入して、読んでみました
クラウドアプリケーション10の設計原則
読んだほうがいい人
感想
まず、すごく勉強になったなと思います。Azureがベースですが、クラウドを使うにあたって、どういった部分を有効活用し、設計にどう活かしていくか、という点に多くの気付きがありました。そもそもクラウドはこういうものだ、という前提みたいなものもあり、改めてたしかに、と思うところが多かったです。
オンプレからスタートしている自分としては、ある意味、感覚をスライドされるというか、そういうことが必要なんだろうなと思います。この本を読んだり、AWSの資格を勉強すると、職場のエンジニアはまだオンプレ感覚で、クラウドを有効活用してないし、料金を無駄遣いしてるな、と気づきました。
様々設計パターン(マネージドサービスに限らず)が紹介されており、こんな方法が、と思う部分が沢山あるので、クラウド使ってる方はぜひ読んでみてほしいです。
クラウドアプリケーション 10の設計原則 「Azureアプリケーションアーキテクチャガイド」から学ぶ普遍的な原理原則 | 真壁 徹 |本 | 通販 | Amazon
AWS設計スキルアップガイド
読んだほうがいい人
感想
AWSのマネージドサービスをどう組み合わせれば、こんな機能を開発したいときにこの設計パターンを使うと、実現できるよ、という様々な設計パターンを教えてくれる本かな?と思って、購入したんですが、そんなことはなかったです(設計スキルアップガイドってこういうことじゃなかったっぽい)
どちらかといえば、SSA取得に読む本に近いかなという印象。基本的な機能の紹介が多く、知ってる、というのが多かったです。期待していた設計パターンもほぼなく、少し勉強になったかなーぐらいでした。
SAAの復習した感じでしたね。初心者からレベルアップ、とありましたが、もうレベルアップしてたってことなのかなw
まとめ
クラウドアプリケーション10の設計原則は、初心者というよりは、中級者向けかなと思います。これはクラウド使うなら、読んでおいて損はないと思います。
逆にAWS設計スキルアップガイドは個人的にはAWS初心者向け。AWSのメジャーなマネージドサービスを知りたいなら、ありだと思いますが、SAA取得したら、物足りないですね。
Python3.13でDDDしてみた経験を紹介するよー
本を読んでは感想を書いてばかりだったので、技術的なことも書いてみようと思います。
仕事でAPIを移行することがあり、それをどの言語でどういうアーキテクチャで作り直そうかなと考えて、いくつか案はあったものの、
- 言語:Python3.13
- アーキテクチャ:DDD
- DB:MySQL
がいいだろう、と思い上記の仕様で改修することにしました。最初は三層アーキテクチャでもいいかって思って、それで改修してたんだが、だんだんやっぱりDDDがええかってことで、DDDへ乗り換えていきました。
移行なので、仕様は確定しており、変更はなく、テストファーストでガンガン進めていきました。
ということで、ここからPythonでのDDDの感想です。
ディレクトリ構成はこんな感じにしました。
|--src/ | |- ***.py |----- lib/ |--------- application/ | |- ***.py |--------- domain/ | |--models/ | |- ***.py | |--user/ | |- ***.py | |--services/ | |- ***.py |--------- infrastructure/ | |--database/ | |--persistent/ | |- ***.py | |--repository/ | |- ***.py
interfaceはdomain/models/***ディレクトリ配下に設置してます。
よかったら、ご参考までにー
うちのエンジニア組織ってどうなん?っていう感想
この業界、あるあるですが、若い子が転職で去っていきました。よくあることなんだが、その子は技術はあるなーとは思ってたものの、なんとなく辞めそうかも、とは思ってた子でした。
それはなぜか?というと、技術の幅を仕事で広げるのは難しく感じてるはずだろうなー、と。つまり仕事を通じて成長することは無理だろって思ってるんじゃないかってことです
伏線ではないし、その子と話したわけじゃないが、あるアプリでその子がGoでgRPCを仮実装していたら、なぜC++じゃないのか?ってツッコミをいれられていた。たしかにC++で実装したバックエンドアプリはあるが、本人はGoで書きたかったんだろうな、とは思った。
この部では、固定の言語で実装みたいなある種の縛りではないが、決まりが存在しており、それでC++で書けってことなんだが、本人からしたらモチベーションは下がっただろうな、と思った。つまりモダンな言語で開発したい思考の子で、新しい技術を使いたい子なんだが、それができない。
なので、このままでは辞めてしまうって可能性はあるなーとは思っていたが、そのとおりになってしまった。
この出来事の前には新卒の子がすぐに辞めていた
なんとなくだが、エンジニアマネージメントできないんだろうってこの2つの件から思い、エンジニア組織が何もされていないって改めて思う。
転職してしまった子には、新しいポジションやモダンな環境での開発をアサインし、モチベーションをあげるなどしなくてはいけなかったのだろう、と思うが、おそらくそんなこともしてなかったのだろう、と感じる。
最新の技術書 RustによるWebアプリケーション開発を読んでみた
最新の技術書読んでみたシリーズ第1弾
経緯
Rustの学習(趣味)を進めるうちにRustが好きなり、yukiさんのブログに出会い、そこからFindyの技術イベントで登壇されたとき、この本が発売されることを知り、購入しました。
読んだほうがいい人
- Rust初学者から中級になりたいエンジニア(この本は中級者向けだそうです)
感想
まず単純に面白かったです。Rustを業務で使っていない自分としてしては、実際の現場で使うとき、どのようなことに気をつけるべきかなど説明があり、たくさん気づきがありました。
yukiさんのブログで紹介されていたクリーンアーキテクチャを写経していたこともあり、アーキテクチャについては、そこまで驚きはしませんでしたが、ここまで細かく分けるのか、という印象でした。
勉強になった、知らなかったところをピックアップして紹介したいと思います。
2章
ローカル環境構築の章です。dockerやcargo-makeを使って、整えていく説明になってます。
勉強になったのは、cargo-makeでdocker composeコマンドも実行できるようにしていくところでした。cargo-makeは知っていて、実際に使ったこともありますが、そのときは、ビルドするため使うもの(cargo checkして・・みたいな)という理解でした。
dockerなどと連結?することで、cargo-makeコマンドから利用できるようになり、ワンタスクライナーでいろんなことができるんだなと勉強になりました。
個人としては、新しい発見で、Rustの開発じゃなくてもcargo-makeとdockerなどを組み合わせて開発環境の構築するのは全然ありだなと思いました。そして、さっそく業務でもローカル環境構築にcargo-makeとdockerを組み合わせて、phpunitがワンタスクライナーで動くようにしました。
3〜5章
ここから実際にアプリケーションを開発していく章になります。先日、やっと写経が終わりましたが、写経すると結構なコード量だな、と思いました。そして、業務でRustを導入するのは無理そうだなとも思いました。脱線しますが、C++できる人はいますが、C++マスターではなさそうなので、コードレビューできる人材がそもそもいないので、作ったとて、無理って言われそうかなと。
話を本の感想に戻すと、ざっくりとした勉強になりました、知らなかったのはこんな感じでした。
- cargo addコマンド
- cargo add クレート名@ほしいバージョン --features 依存コード をするとよい
- Cargo.toml
- []はセクションと呼ばれる
- [dependencies]はdependenciesセクションと呼ばれる
- [dev-dependencis]はテストやベンチマークのときのみにビルドしたい依存クレートを追加したい場合
- shaku_axumがある
- todo!とunimplemented!マクロ
- todo!:「まだ実装されていない」(実装の意図がある)
- unimplemented!:「実装されていない」
- let BookRow { ... } = value;について
- パターンマッチを使って、構造体の中身を直接取り出すことができる
- 深めのネストした構造体、フィールドの一部を省略する気泡を利用できたりする
// 仮にdescriptionが取り出し不要の場合、「..」を用いて省略することができる
impl From<BookRow> for Book {
fn from(value: BookRow) -> Self {
let BookRow {
book_id,
title,
author,
isbn,
..
} = value;
Self {
id: book_id,
title,
author,
isbn,
}
}
}
- トランザクション分離レベル
その他だと、ワークスペースによる依存管理は知っていましたが、やったことはなく、今回は初めて実装しましたが、意外と簡単でした。次にアプリケーション作るときは使おうと思います。
また、驚いたのは、macro_rules!を実装していたところですね。macroは知ってるけど、cargoのライブラリ作るときに使うんでしょ?とか思っていたので、そういう使い方があるんだなと思いました。
あとは、トランザクション分離レベルも知らなかったので、これも勉強になりました。
まとめ
中級者向けの本だなというのはありました。非同期プログラミングとはなど説明してくれてはいますが、Rustの概念や構文が理解できていないと難しいかな、というのはあります。
RustでWebアプリケーションってどうやった作るの?っていう人はまずは参考にすればいいと思いました。
今更ながらネットワークはなぜつながるのか 第2版を読んでみた
今更ながら読んでみたシリーズ第十一弾
経緯
ネットワークの本質、基礎的な部分を知っておきたいと思って購入しました。
読んだほうがいい人
- ネットワークさっぱりなエンジニア
感想
まず面白かったです。業務でクラウド使ったりありますが、PCからサーバーまでどんなことが起きているのか?というのは知らなかったので、読んで勉強になりましたし、昔ドットコムマスターの資格勉強したときを思い出しました。本で説明されてるようなことが、あったような。
ソフトウェアエンジニアとしては、5章からが業務と連結してきて、結びつく感じがありました。1章〜4章までは知らないところで、ネットワークエンジニアが知っておくべきところなのかな?という印象です。
自分はネットワークはどちらかといえば、苦手な意識がありますが、そんな人でも楽しく読める本でした。
まとめ
ネットワークさっぱりわからん、ネットワークちょっと苦手、ネットワークってどんなことしてんの?という方はぜひ読んでみると、よいと思いました。