こんにちは。 @srockstyleです。
Rails書いてます。Rails6で好きな機能はActionTextです。
以前フリーランスエンジニアの友人と話していて
「Rails周りを扱いながら業務に投入するには知識多すぎて、コードだけ書いていたひとたちや初級から中級になるひとにはしんどいかもなあ」
という話題が上がったので、僕が業務でRailsを使っていて日常的に使うけど見落とされがちな知見をまとめてみます。
業務でRails使っている人、なにか追加で必要なものなどあればコメントしていただけると助かります。
1. bash,zshなどのシェルを使ったUNIXコマンドライン
Railsをやるときにも必要になりそうですが、ターミナル上で必要とされる知見です。サーバに入ればGUIが設定してあるサーバなんて滅多にないので、そこで作業するには必須のスキルになります。
- ディレクトリを作る / mkdir
- ディレクトリに移動する / cd
- ファイルのリストを見る。 / ls
- ファイルの中身を見る / cat、vi、less
あたりはできるといいですね。
2. Linux / Unixのユーザ権限とディレクトリ構成
LinuxやUnixのユーザ権限とディレクトリ構成がどうなっているかは押さえておくといいですね。
MacBookを使う人だとこの辺りはとっつきやすいかもしれません。
本番環境だとrootユーザでアプリを起動はしない、ドキュメントルートは、みたいなお作法もありますね。
作業は権限を限定した一般ユーザで行うのがおすすめです。rootユーザで動いているサーバをたまにみてしまうこともあります。
3. サーバ-クライアント通信の基礎
ネットワーク、本当に理解しようとすると大変ですよね。僕もたまに言ってること正しいのか自信ないです。
RailsはWebアプリケーションを作るためのフレームワークなので、httpプロトコルについて知っておくのがおすすめです。
サーバ/クライアントという言葉の使い分けに注意するといいです。
4. 動かすまでに必要なセッティング
Linux内部の「サーバ」といったものに対する知見が必要になりますよね。
本番でリリースするまでには以下のものが必要になります。
- SSH
- DNS
- WEB
- APP
- DB
サーバ上で何をうごかせばいいのか、どういうものかは知っておくことをおすすめします。SSHとかDNSとか、どのあたりで繋がらなくなっているのかトラブル解決をするのに役立ちます。
5. SSH
SSHの設定についてお話します。
SSHもそうですがコマンドラインでしょうか。今ではDocker使ってBlue Green Deployなどを行うことも増えてきmしたが、EC2インスタンスやVPSにSSHしてデプロイはまだあるようです。
リモートのサーバにSSH -> git clone -> bundle -> server restartの流れは掴んでおくといいです。
ただ、SSHの設定はサーバをいただいた時にいくつかしておかないと危険なこともあるので、きちんと行う必要があります。
こんな設定をしておくといいです。
- パスワード認証は鍵認証にする
- rootユーザでのログインは不可能にする
- sudoを使ってrootを使えるようにする
- ポートを変える
- リモートログインできるユーザは限定的にする
6. DNSサーバ
これも↑のネットワークに通じますね。
サーバにつながらない、で一番最初に発生しがちかもしれません。ドメインの向き先を間違えたりしちゃいます。
昔僕はサーバの中を疑ったりしてしまったことがありまして、サーバ内は通常なのにつながらないとは何事だ、結果ドメインが向いてませんでした、というのはわりとありました。
7. Webサーバ
ここでは80 / 443を受け取るサーバとしましょう。
代表的なのはnginx / Apacheですが、h2oというのもあります。
本番で使うならここの設定ファイルをどうしようかの知識を押さえておくのがおすすめです。
まるまるアプリ構築を行う業務ではサーバ構築も含まれることがほとんどですね。
ここは後でどこかのドキュメントにまとめます。
8. アプリケーションサーバ
Webサーバと一緒にするか迷いました。ここはあえて分けますね。ちなみにアプリケーションを作らない人からしたら、あまりパッとくる概念ではないようです。説明すこし難しい。
RailsではPassenger、Unicorn、Pumaなどが有名ですね。
ここの設定値はconfig/***にあることが多いです。unicornならconfig/unicorn.rbが設定ファイルです。
ここも設定方法あとで書きますね。
Webrickなどもありました。今はRubyのbundle gemになっています。
9. コンピュータリソースについて
「リソースが〜」などと言いますね。代表的なのは以下のものになります。
* メモリ
* CPU
* ディスク容量
これらの種類と、使い果たすとどういった弊害がおきるのかは押さえておくと業務で運用中にバグなどの発見に繋がることもあります。
Linuxならtop / ps / vmstat / uptimeあたりは覚えておくといいですね。
10. デプロイ
最近は手元でDockerコンテナをまとめる -> BlueGreenみたいな手段も増えてきて、デプロイの方法も多種多様になってきました。capistranoという手段もレガシーになっていくのでしょうね。
サーバにSSHして行う系のものもまだ生き残ってます。手元でコマンドを実行 -> 配置されるまでの流れは確認しておくといいです。1〜9のことを気をつけているとスムーズにできると思います。
このポイントは自分以外の人の環境でもできるようにすること!
業務では自分が会社を辞めても誰かができるようにするのがとても大切です。
まとめ
いろいろ眺めていてscaffoldすれば簡単〜とか言ってはいけないな、と思いました。
初めてRailsでプロダクト開発するとき、この記事を思い出してもらえたら嬉しいです。