2018年の最先端バックエンドエンジニアになるよっていう話

どうも最近アウトプットって大事かもな〜。と思っているナサです。 とは言っても、「やらなきゃ!」って思ってやるならそれは楽しめてないのでやらなくてもいいのでは?と思ってしまいますね。

この話をしだすとめっちゃ脱線する気がするので略!

本題

この記事 には2018年の最先端バックエンドエンジニアになるためのロードマップが書いてあります。

少し前にこの記事を読んで「あ。この通りに進めてみよう!」と思いました。 ただやるだけじゃ味気ないですし、どうせならステップごとに何を学んだかアウトプットするのもいいかと思いまとめることにしました。

Step 1– Learn a Language

言語を選べってことですね。

僕はRustでやってみることにしました。 理由としては普段Ruby(Rails)でアプリケーション開発をするバイトをやっているので、全く違う物にしようと思ったからです。

既にバックエンド開発を行っていて、スクリプト言語を使っているのであれば、次は別のスクリプト言語ではなく、関数型言語もしくはマルチパラダイム言語から選択することをお勧めします。

はい。この言葉に従っただけですね。

GolangやElixirも考えたのですが このスライド をみて、「たくさん学びをくれるのか〜。Rustやるか〜」みたいな軽いノリで決めました。 まあ、言語選びって結局なんとなくですよね!(多分違うけど)

Step 2 — Practice what you have Learnt

ステップ2。なにか作れってことですね。

Rustの言語仕様を学びながらなにか作ろうと思ったのですが、バカには辛かったので言語仕様をざっと抑えることにしました。

このサイトが入門にはおすすめです!

RubyDartを普段書いていたのですが、Rustのような強い型付けは初めてだったのでかなり苦戦しました。が新しい概念が多数あり新鮮な気持ちになりました。

普段やっている言語とぜんぜん違う言語を学ぶことはとっても面白いのでおすすめです。(これを書いていて、「プログラミングは手段か目的かみたいな話を思い出しました。どっちでもいいですね)

で、作ったやつがこいつらです。

trashコマンド

rmコマンドにエイリアスを貼って使うようのコマンドです。 rmで間違ってファイルを消してしまったときに「ゴミ箱に行けよ!」と思ったので、ファイルをゴミ箱に移動させるだけのコマンドを作りました。 ついでにゴミ箱を空にすることもできます。 はい。クソコマンド1号です。

メモコマンド

コマンドラインでメモをぱぱっと取るためのCliツールです。 メモテンプレートファイルを指定したりもできます。 まあまあ、そこそこに便利ですがパットしないツールです。

インタプリタ

これはまだ開発中なんですが、インタプリタを作ってます。 現状はifが使える電卓ですが、これから関数、forなども実装していきます。

Step 3 — Learn Package Manager

パッケージマネージャを学べと。 RustのパッケージマネージャにCargoというのがあります。 結構何でも揃ってる感のあるパッケージマネージャなので、ここでまとめようとすると、長くなるので略!

Step 4 — Standards and Best Practices

Rustの良い書き方を学べと。

概要 - Rust APIガイドライン ココらへんを見ながら学びました。

あとClippyというRustのlintを導入しました。この御方は結構便利な人で、「これ使ってねーだろボケ。」とか「match じゃなくてif letの方が可読性高いんじゃねボケ!」みたいに言ってくれます。

この御方をCIにいれてClippyさんの承認がないとマージできないようにしました。

Step 5 — Security

OWASPガイドラインを読めと。

これも長くなるので略!

Step 6 — Practice

パッケージを公開し他の人が使えるようにしろと。 GitHubのプロジェクトにPRを送ってみろと。

メモコマンドはRustのライブラリ(crateという)が集まるcargo.ioで公開しています。 (cargo publishコマンド一発で終わったので楽ちん)

PRもめっちゃ簡単なやつですが送ってみました。

Change editor selection from text to select view by k-nasa · Pull Request #29 · simeg/eureka · GitHub

Change conditional branch by 'else if' to 'match' by k-nasa · Pull Request #65 · mitsuhiko/indicatif · GitHub

PRがマージされると謎の貢献感がわきますね。

Step 7 — Learn about Testing && Step 8 — Practical

テストを書けと。

Rustはassertなどのテストツール(言い方合ってる?)が付いているので書きやすかったです。メモコマンドやtrashコマンドをはファイル操作が主なので、テストがめんどくさそうだと思い書いていません。 インタプリタはunitテスト、結合テストを書いています。

Step 9 — Learn about the Relational Databases

リレーショナルデータベースにデータを保存する方法を学べと。

これ以降はまだ未実行です