- 投稿日:2019-05-06T21:12:10+09:00
[初学者向け]Pythonで便利なライブラリ
はじめに
こんにちは。
僕はプログラミング歴3ヶ月の初心者なのですが、今回はそんな初心者の目から見た「覚えておくと便利なライブラリ」を紹介したいと思います!
すでにいくつか記事を書いてるので、よかったらそちらもついでに見てやってください。下のリンクの記事から繋げやすい内容になっています。
プログラミングしてみたい方はまずPythonのインストールを!(Mac向け)ライブラリってなんだ?
プログラミング(この記事でいうとPython)初心者の方はまずライブラリという言葉を聞き慣れていないかもしれません。
ライブラリとはプログラミングをする上で欠かせないものであり、画像を編集したいときや、ファイルを整理するときなどに使えるいわば飛び道具のようなものです。すでに完成されているので僕たちは決められた書き方をするだけでその飛び道具が使えてしまうんです。
import 〜という決まり文句で呼び出すと使えるようになります。ではそんな便利なライブラリをいくつか見ていきましょう!
Numpy
Numpyは数値計算をするときや、画像をピクセルごとに分解して配列にしたい時に使えるライブラリです。ディープラーニングで画像分類をする時などに必ず必要になってくる知識なので、AI関係のことに興味のある方は必ず覚えておきましょう!
こんな感じで使うのですが、今は全く分からなくて構いません。「へー、そんなものがあるのか」ぐらいの認識で結構です。
Numpyを使うにあたって学習(人によってはおさらい)しておくべきなのが行列です。高校の数学で習った方もいるとは思うのですが、指導要領の変更で外れている年もあるので、習ったことのない方はぜひ学習してみましょう。全然難しい内容じゃないですし、ググったら簡単に噛み砕いて教えてくれているサイトが山ほど出てきますよ!Pandas
Pandasはデータ分析を行う上で必須のライブラリです。Pandasを使うとデータの読み込み(エクセルのデータなど)や不必要なデータの除外など、機械学習をする上では欠かせない作業が一気に簡単になります。機械学習に必要な作業の大部分がこのデータ分析になってくるので、覚えておくとめちゃくちゃ強いです!データサイエンティストになりたい方には特に必須ですよ。
Pandasの発展的な内容では株価分析などもできるようになるので、株に興味がある方にもおすすめです。プログラミングと組み合わせてトレードなんかできたらカッコよくないですか?(笑)Matplotlib
MatplotlibはPythonの描画ライブラリで、線グラフや棒グラフなどデータを可視化したい時に使えるライブラリです。
例えばパワーポイントなどを使ってプレゼンをしないといけない場面でグラフを使いたい時、Matplotlibが大きな力を発揮します。データをグラフにしたい時、シンプルなやり方で緻密なグラフが描画できるのでとても便利ですよ!
これはMatplotlibの公式サイトから引用したグラフです。こんなグラフが数行のプログラミングで実現できるってすごくないですか!?
勉強し始めの頃はなんの意味もないグラフをかくだけでも構いません!「こういう使い方をするんだな」ぐらいの軽い気持ちで色々書いてみましょう。まずは自分で書くことが大事ですし、こういうグラフの形で目に見えるとシンプルに楽しいです。Keras
Kerasは今までの3つとは少し毛色が違って、本格的に機械学習をする時に使うライブラリです。僕の今までの記事でも何度か出ている画像分類などで力を発揮します。
また、Kerasは公式ドキュメントに使い方が多く載っていたり、Kerasを使ったコードレシピもネット上にたくさん転がっているので何かを形にしたい時に即座に使いやすいライブラリです。
なんでこんなにサンプルが転がっているかというと、そのシンプルさが理由なんです。これまでにあったライブラリよりもはるかに少ない記述量で機械学習が簡単にできちゃう優れものであり、みんなが使うから必然的にネットに情報量も多いので勉強しやすいのがおすすめポイントです。
「エラーメッセージが出てきたけど何が書いてあるか分からない?」なんて時も同じエラーメッセージが出た人が掲載した解決法をググればなんの問題も無しです。安心して勉強しちゃいましょう!僕が書いたこんな記事もありますので、ある程度勉強が進んだ方はこのやり方を真似て画像分類してみると面白いかもしれません。
VGG16で画像分類(2クラス)その他のライブラリ・モジュール
上の4つを特におすすめしたかったので詳しく書きましたが、その他にも以下のようなライブラリがあるので気になった方はぜひググってみてください!今は使わないとしても結局使うことになるライブラリばかりだと思うので、覚えておいて損はないです。
・os(ファイル操作で使う)
・dlib(顔認証などで使える)
・OpenCV(画像の処理はこれさえあれば困りません!)
・sklearn
・sys
・globetc.....
こんな感じでたくさんあるのでぜひ調べてみてください!
参考にしたサイト
終わりに
いかがだったでしょうか?
この記事では書ききれない量の便利なライブラリがあるので、各自で調べてみるとさらに勉強の質が上がります!少しでも気になることはどんどんググって自分のものにしていきましょう!
また、この記事で書いたものはどれも僕の最初の記事で紹介したネット講座で勉強できるものばかりなのでそちらの記事も見ていただけたら嬉しいです!
プログラミングやディープラーニングの勉強、何から手をつければ良い!?では、また次の記事で!
- 投稿日:2019-05-06T14:56:28+09:00
自分はどのエンジニアに向いている?エンジニア適性診断1DAYキット
おつかれさまです、かきうち(@kakistuter)です。
背景
エンジニア新人~初心者の皆さんから「自分はどんなエンジニアの仕事に向いているかわからない。。。」という声をよく聞きます。
そこでエンジニア適性診断1DAYキットを作成しました。
ゼロの状態からアプリの公開までの仕事の中には、フロントエンドエンジニアの仕事もサーバサイドエンジニアの仕事もインフラエンジニアの仕事も含まれています。
そこで、一度ゼロの状態からアプリの公開までを体験してみるのが良いと考えました。
下記の流れに沿って体験し、最後の診断結果を目安にしていただければうれしい限りです!もし詰まった部分や間違ってるそおい!ってのがあればTwitterのDMまで!
https://twitter.com/kakistuterもうちょい詳しい背景は下記のyoutubeかnoteで
https://youtu.be/34UDOEMGnNE
https://note.mu/kakiuchis/n/n0dd2fcfed3b2全体の流れ
以下の順番ですすめていきます。
- AWSアカウントの作成
- Cloud9準備
- Cloud9で開発環境構築(ちなみに一瞬でカンタンです)
- いよいよ開発です
- 機能面でのカスタマイズ
- デザイン面でのカスタマイズ
- アプリケーション側での公開準備
- カギ作成
- Github登録
- Githubでのソースコードの公開
- LightsailでOS作成
- AmazonLinuxへのアクセス
- AmazonLinuxの最初の準備
- Rubyのインストール
- bundlerのインストール
- PostgreSQLのインストールと設定
- Nginxのインストールと設定
- GithubからAmazonLinuxにソースコードを入れる
- AmazonLinux上でアプリを起動させる
- では全世界に公開されたWEBサイトを見てみましょう
Cloud9で開発準備
みなさん開発エディタにSublimeTextとかAtomとかサクラエディタとか使っているかと思います。
ここではAWSのサービスの1つであるCloud9を使います。
Cloud9は開発環境構築が超カンタン、かつ、ブラウザ上で開発可能なスーパーエディタなのです。AWSアカウントの作成
まずはCloud9を利用する前にAWSのアカウントを作成します。
https://aws.amazon.com/jp/
にアクセス(下記画面)
右上の
無料サインアップ
か真ん中ちょい左の今すぐ無料サインアップ
をクリック
すると下記画面にいきます。
流れにそって下記情報を入力していきます。
- メールアドレス
- パスワード
- 個人情報(氏名、生年月日、住所など)
- クレジットカード情報
クレジットカードはビビりますがAWS無料枠の範囲内だと料金発生しませんので、その範囲内で進めていきますよ!
※2019/5/5時点で本Kitのレベルで1ヶ月以内のサービス利用であれば課金されないことを確認しています。もちろん無料のベーシックプランを選択
すると下記画面が表示されます。
ほぼ同タイミングで登録したメールアドレス宛にこんなメールも来ます。
これでAWSアカウントの作成完了。
Cloud9準備
つぎにCloud9を使う準備をしていきます。
https://console.aws.amazon.com/console/home
にアクセス(下記画面)
さっき登録したアカウントでサインインすると下記のような画面にいきます。
左上のサービスを検索するの検索窓に
cloud9
と入力してクリック
すると若干いかつめなこんなページに行きます。
真ん中ちょい右のオレンジのCreate environmentをクリックするとこんな画面に行きます。
Name→開発環境の名前(なんでもOK)
Description→その開発環境の説明(なんでもOK)を入力してNext step
するとこんな画面に行きます。このあたりは「どのAWSサービスを使いますか?」とか「どんなOSを使いますか?」的なセッティングですが全部デフォルトのまま進めます。
すると下記のような確認画面がでてくるのでCreate environment
これでCloud9準備完了です!
また下記のようにそれぞれの部分を呼ぶことにします。
- 赤の部分→ファイルツリー
- 緑の部分→ファイルビューワー
- 青の部分→コンソール
Cloud9で開発環境構築(ちなみに一瞬でカンタンです)
じつはすでにほぼ完了しています。
Git, Docker, Node.js, Python, PHP, Ruby on Railsといった流行りのツールが事前インストール済みなのです。今回は
Ruby on Rails
とPostgreSQL
をつかって開発していきます。
cloud9のデフォルトではPostgreSQL
の準備が整ってないので、これを準備していきます。cloud9のコンソール部分で下記のように入力してEnterしてみましょう。
【cloud9コンソール】.sudo yum -y install postgresql postgresql-server postgresql-devel postgresql-contrib下記のように
Complete!
と表示されればPostgreSQLのインストール成功です。
また
ec2-user:~/environment $
のようなほにゃらら $
という表示がされていれば、処理(成功でも失敗でも)完了を意味します。つまりほにゃらら $
が表示されるまでは待ちましょう。
※処理によって長く待たないといけないものもたくさんあります。次にPostgreSQLを初期化、起動させます。
下記コマンドを打ち込みましょう。【cloud9コンソール】.sudo service postgresql initdb && sudo service postgresql startつぎに
ec2-user
という名前でのPostgreSQLのデータベースを自由にコントロールできるユーザ(SUPERUSER)を作成します。
今後、データベースはRuby on Railsを経由して作成し、今回のRuby on Rails開発環境上のユーザの名前はec2-user
であるためです。
現段階ではあまり理解しなくて大丈夫です。
下記コマンドを打ち込みましょう。【cloud9コンソール】.sudo -u postgres psqlするとpostgres=#と表示され、その後ろに下記コマンドを打ち込みます。
【cloud9コンソール】.CREATE USER "ec2-user" SUPERUSER;次に下記コマンドを打ち込みます。
【cloud9コンソール】.\qこれで開発環境構築は完了しました。
いよいよ開発です
cloud9のコンソール部分で下記のように入力してEnterしてみましょう。
【cloud9コンソール】.rails new testapp -d postgresqlこれはRuby on Railsの必要ファイルを自動生成するコマンドなのです。
※testapp
の部分はアプリ名です。好きなの何でもOK。そのおかげで左のファイルツリーにはtestappディレクトリ内にたくさんのファイルが自動作成されました!
次にコンソール部分で下記のように入力してEnterしてみましょう。
【cloud9コンソール】.cd testapp先ほど作成したtestappディレクトリに移動するためのコマンドです。
おかげで$
の前の部分がec2-user:~/environment
→ec2-user:~/environment/testapp
に変化しています。
$
の前の部分は今自分がどこにいるかを表しているのです。続いてコンソール部分で下記のように入力してEnterしてみましょう。
【cloud9コンソール】.# これは「~/environment/testapp」で実行するコマンドです。 # 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。 # もしなっていなければ「cd ~/environment/testapp」と入力します rails g scaffold Blog title:string content:textブログ(Blog)に関するデータベースの領域を作成して、その領域にはタイトル(title)とコンテンツ(content)を保管できるようにしたい。そしてタイトルの保管容量は255文字以内(string)、テキストの保管容量はそれ以上(text)にしたい。
これはそのために必要なファイル群を一気に自動生成するコマンドなのです。
※どんなアプリを作りたいか?でBlog title:string content:text
の部分をカスタマイズするのです!そしてコマンドを打った後に出てくる
create ほにゃらら
のほにゃらら
が新たにファイルツリーに生成されていることが分かります。続いてコンソール部分で下記のように入力してEnterしてみましょう。
【cloud9コンソール】.# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。 # もしなっていなければ「cd ~/environment/testapp」と入力します rails db:create db:migrateこれは、先ほど
rails g scaffold....
のコマンドで自動生成されたファイルをもとに、実際にPostgreSQL内にデータベース領域を作成するための処理なのです。じつはこれで一連の開発が完了しました。
そうです。完了したのです。ではサーバを起動して完成形を見てみましょう。
コンソールで下記(サーバ起動コマンド)を実行します。
※今回サーバとなる``【cloud9コンソール】.# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。 # もしなっていなければ「cd ~/environment/testapp」と入力します rails sコマンド実行結果の1行目に
Booting Puma
とあります。
このPumaはWEBサーバの1つで、これは最初に実行したrails new testapp -d postgresql
のときにインストールされているのです。この状態で、下記のようにメニューバーのPreviewからRunning Application Previewをクリックします。
その後、新たにでてくる画面のURL欄からURLをコピペします。
※URLはhttps://ここは人によってことなる.vfs.cloud9.ここは人によってことなる.amazonaws.com/
みたいな感じです。
でこのコピペしたURLの後ろに
/blogs
とつけてブラウザで表示させてみましょう。
※つまりhttps://ここは人によってことなる.vfs.cloud9.ここは人によってことなる.amazonaws.com/blogs
というURLで検索です。自由に触ってみてください。
そうです。すでにブログアプリが出来上がっているのです。アプリをカスタマイズする
ではどうせならすこしアプリをカスタマイズしてみましょう!
機能面でのカスタマイズ
たとえば、本日の日付を表示させたいとしましょう。
まずはファイルツリーから/testapp/app/views/blogs/index.html.erb
をダブルクリックします。この
/app/views/blogs/index.html.erb
は/blogs
の画面部分を表現しているファイルです。
このファイルをいじることでカスタマイズ可能です。例えば下記のように編集してみましょう。
※<h1>Blogs</h1>
の下に追記しています
※ 追記後はCtrl+S
で上書き保存しましょう/testapp/app/views/blogs/index.html.erb<p id="notice"><%= notice %></p> <h1>Blogs</h1> <!-- ここから下を追記 --> <%= Time.now %> <!-- ここから上を追記 --> <table> <thead> <tr> <th>Title</th> <th>Content</th> <th colspan="3"></th> </tr> </thead> <tbody> <% @blogs.each do |blog| %> <tr> <td><%= blog.title %></td> <td><%= blog.content %></td> <td><%= link_to 'Show', blog %></td> <td><%= link_to 'Edit', edit_blog_path(blog) %></td> <td><%= link_to 'Destroy', blog, method: :delete, data: { confirm: 'Are you sure?' } %></td> </tr> <% end %> </tbody> </table> <br> <%= link_to 'New Blog', new_blog_path %>追記上書きが完了したら、先ほどのアプリの画面で更新ボタンをおします。
すると下記みたく、時間が表示されます!
さらに
<%= Time.now %>
を<%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %>
に変更してみましょう。/testapp/app/views/blogs/index.html.erb<p id="notice"><%= notice %></p> <h1>Blogs</h1> <!-- ここから下を追記 --> <%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %> <!-- ここから上を追記 --> <table> <!-- 以下省略 -->そして追記上書きが完了したら、先ほどのアプリの画面で更新ボタンをおします。
すると下記みたく、日付表示がカスタマイズされています!
さらにいじってみてもOKです。
デザイン面でのカスタマイズ
さらにデザインを変更してみましょう。
<%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %>
を
<div style="background-color:red;"><%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %></div>
に変更します。/testapp/app/views/blogs/index.html.erb<!-- 「<h1>Blogs</h1>」の下に追記しています --> <!-- 追記後は「Ctrl+S」で上書き保存しましょう --> <p id="notice"><%= notice %></p> <h1>Blogs</h1> <!-- ここから下を追記 --> <div style="background-color:red;"><%= Time.now.strftime("%Y年%-m月%-d日 %-H時%-M分%-S秒") %></div> <!-- ここから上を追記 --> <table> <!-- 以下省略 -->追記上書きが完了したら、先ほどのアプリの画面で更新ボタンをおします。
すると下記みたく、時間の部分が赤くなります!
さらにいじってみてもOKです。
こんなふうにして、
- 機能的な部分をカスタマイズしていくのがサーバサイドエンジニアの仕事
- 見た目的な部分をカスタマイズしていくのがプロントエンジニアの仕事
なのです。
ではいったんキリがないので休憩のためサーバを停止しましょう。
コンソールでCtrl
とC
の同時押しでサーバSTOPします。すると下記のような感じで、元のコマンドを実行できる状態に戻ります。
全世界に公開する
そうです。気になっていますよね。
このブログアプリをどうやって全世界に公開するのか。
それを今からやっていきます。アプリケーション側での公開準備
全世界公開に関しては主にインフラエンジニアの仕事ですが、一部サーバサイドエンジニアが行う仕事もあります。
それをいまからやっていきます。まず
/testapp/Gemfile
をファイルツリーから開き、
ファイルビューワーでそっくりそのまま下記のように書き換えてください。/testapp/Gemfile.source 'https://rubygems.org' gem 'rails', '~> 5.0.0' gem 'pg', '~> 0.18' gem 'puma', '~> 3.0' gem 'sass-rails', '~> 5.0' gem 'uglifier', '>= 1.3.0' gem 'coffee-rails', '~> 4.2' gem 'therubyracer', platforms: :ruby gem 'jquery-rails' gem 'turbolinks', '~> 5' gem 'jbuilder', '~> 2.5' gem 'unicorn', '5.4.1' group :development, :test do gem 'byebug', platform: :mri end group :development do gem 'web-console' gem 'listen', '~> 3.0.5' gem 'spring' gem 'spring-watcher-listen', '~> 2.0.0' end gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]これは公開に必要なツール(Unicornというアプリケーションサーバ)を新たに追記するという作業です。
次にコンソールで下記コマンドを実行してください。cloud9コンソール.# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう # もしなっていなければ「cd ~/environment/testapp」と入力します bundle installこれはGemfileに追記したもの(Unicornというアプリケーションサーバ)を実際にインストールするコマンドです。
でこんな感じになれば成功です。
つぎにUnicornというアプリケーションサーバの設定を行います。
まずは設定するためのファイルを新規に作成します。
ファイルツリーで/testapp/configディレクトリ
を右クリックしてNew Fileをクリック
名前をunicorn.rb
にします。そして下記のように入力して保存しましょう。
※※Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築を参考にさせていただきました!/testapp/config/unicorn.rbworker_processes Integer(ENV["WEB_CONCURRENCY"] || 3) timeout 15 preload_app true listen "/var/www/testapp/tmp/sockets/unicorn.sock" pid "/var/www/testapp/tmp/pids/unicorn.pid" before_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn master intercepting TERM and sending myself QUIT instead' Process.kill 'QUIT', Process.pid end defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect! end after_fork do |server, worker| Signal.trap 'TERM' do puts 'Unicorn worker intercepting TERM and doing nothing. Wait for master to send QUIT' end defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection end stderr_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT']) stdout_path File.expand_path('log/unicorn.log', ENV['RAILS_ROOT'])これはUnicornの通信プロセスの制御方法だったり、Unicornのログの出力場所だったりを設定しています。
なんとなく雰囲気だけ理解してればOKです。カギ作成
今回のリリースではCloud9とGithub(後ほど設定)とAWS Lightsail(後ほど設定)の3つの環境を連携させながら全世界に公開します。
そのために各環境を高セキュリティで接続させるためのカギを作成します。
カンタンです。コンソールで下記コマンドを実行してください。
cloud9コンソール.ssh-keygen -t rsaコマンド後入力画面がでてくるが全てエンターを実行する。
こんな感じ。
コンソールで下記コマンドを実行してください。
cloud9コンソール.cat /home/ec2-user/.ssh/id_rsa.pubこのコマンドによって、
ssh-rsaではじまり数字をハイフンでつないだやつで終わる超長い文字列が表示されます。
すぐあとのGithub登録で使うのでコピペしておきましょう。Github登録
今回はcloud9からGithubというソース管理サービスを経由してAWS Lightsail(後ほど設定)というサーバにソースコードを転送することでアプリを公開します。
そこでGithubに登録します。
まずは下記にアクセスしましょう。
https://github.com/joinここでは$0の方を選んでContinue!
アンケートなのでいい感じに選択してSubmit
すると下記のような「メール来てますよ」と教えてくれる画面に行きます。
登録したメールアカウントで受信メール見るをみるとこんな感じのメールが来ています。
Verify email addressをクリックすると登録完了して下記の画面に遷移します。
真ん中ちょい右のStart a projectをクリック
すると下記の画面にいきます。
Repository nameに「testapp」と入力してCreate repositoryをクリック
これがtestappというアプリケーションのソースコードを収めるべきスペースです。
まだ何も入っていない状態です。つぎにCloud9とGithubを連携させるべく、先ほどCloud9上で作ったカギをGithubにセットします。
下記にアクセスしましょう。
https://github.com/settings/keysこんな感じです。右上のNew SSH keyをクリックします。
titleに「aws_cloud9」
keyにcat /home/ubuntu/.ssh/id_rsa.pub
で確認したカギ(ssh-rsaではじまりIPアドレスで終わる超長い文字列)
を入力します。
そしてAdd SSH keyをクリック。これでGithub登録とCloud9との連携完了です!
Githubでのソースコードの公開
cloud9コンソールで下記コマンドを順に実行してください。
cloud9コンソール.# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう git init git add . git commit -m "first commit"下記のようになれば成功です。(全ファイルが登録されてるので全ファイル名が処理結果として出力されます)
これは、
- testappディレクトリ以下のファイル群をGitというツールで管理スタートし(git init)、
- testappディレクトリ以下のどのファイルを対象にするかを決めて(git add . ※ドットは全ファイルを意味する)、
- 状態を確定させる(git commit -m "なにかメッセージ")
ということをしています。
そのあと、cloud9コンソールで下記コマンドを実行してください。cloud9コンソール.# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう git remote add origin git@github.com:kakiuchis2/testapp.gitこんな感じで特になにも表示されませんが、
先ほどのGithubのkakiuchis2/testappリポジトリの場所をcloud9上に認識させたということです。
そのあと、cloud9コンソールで下記コマンドを実行してください。
cloud9コンソール.# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう git push origin master途中でyesかnoか聞かれたら、yesと入力しましょう。
こんな感じになれば成功です。
これは「cloud9のtestappディレクトリ以下のファイル群」を「Githubのkakiuchis2/testappリポジトリ」にコピーしているのです。
では本当にうまくいったか確認しましょう。
Githubのトップページにアクセスします。
https://github.com/左のkakiuchis2/testappをクリック!
※kakiuchis2
の部分はユーザ名なので人それぞれ異なります。Cloud9と同じファイル構成がGithub上でも完成しています。
これでGithubでのソースコードの公開は完了です!おおよそここまでがサーバサイドエンジニアの仕事です。
ここからインフラエンジニアの仕事にはいっていきます。全世界公開用のサーバ環境を準備する
フロントエンドエンジニアとサーバサイドエンジニアのつくったソースコードを預かって、
それを全世界に公開までもっていくのがインフラエンジニアの担当部分です。
では早速やっていきましょう。LightsailでOS作成
通常だとレンタルサーバと契約して、OSのイメージみたいなのを入手して、インストールして。。。
みたいな感じですがLightsailは超カンタン!
さっそくやっていきましょう。まずAWSコンソールにアクセス
https://console.aws.amazon.com/console/homeそしてサービスを検索するの検索窓にlightsailと入力してクリック。
こんな感じです。
プラットフォーム→Linux/Unix
設計図→「OSのみ」、Amazon Linux
を選択します。
つぎにインスタンスのプラン選択→最初の1カ月無料である$3.50ドルのやつ
を選択します。
そしてインスタンスの作成をクリックすると下記画面に行きます。
これでLightsailでAmazonLinux作成が完了です!
Amazon Linuxへのアクセス
Amazon_Linux-512MB...の部分をクリックすると下記画面に行きます。
真ん中らへんの
SSHを使用して接続
をクリックすると下記画面に行きます。
これでAmazon Linuxへのアクセス完了です。
インフラエンジニアはこの黒い画面(便宜上Lightsailのコンソールと呼ぶことにします)で仕事をしていくのです。
じつはこの画面はAmazon社が作った場所は秘密にされているどこかのサーバにリモートでアクセスしているのです。
そのサーバの一部を借りて、全世界にアプリを公開できるサービスがLightsailなのです。Amazon Linuxの最初の準備
Cloud9とちがって本番環境のAmazon Linuxはなにも準備されていません。
自分で準備していくのです。
これがインフラエンジニアの仕事です。さっそくいきましょう。
Lightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.sudo su -これは権限をMAXにする行為です。
本来の仕事では危険なのであまり行いませんが、今回の適性診断ははスピード重視のため全コマンドをMAX権限で実行します。つぎにLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.yum -y updateこれは、yum(ヤム)といういろんなソフトをインストールしたりアンインストールしたりするツールがあり、それをyum管理されているソフトウェアを最新状態にするという処理です。
あまり気にせず先に進みましょう。つぎにLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.yum -y install gitこれはyumでGitをインストールする処理です。
先ほど開発のところでも登場したGitですが、
インフラでもGitを通じて、世界中のいろんな人が作ったものをコピーすることができるのです。Rubyのインストール
では次にRubyをインストールしましょう。
RubyをインストールしないとRuby on Railsが使えないのです。
では行きましょう。Lightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.git clone https://github.com/rbenv/rbenv.git /usr/local/rbenvこれはRubyのインストールを便利にするためのツールrbenvがgithubで公開されており、そのソースをAmazonLinuxの
/usr/local/rbenv
ディレクトリにコピーしているのです。つぎにLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.vi /etc/profile.d/rbenv.sh最初はなにも入力できない状態です。
そこでi
をタイプします。
すると左下に-- INSERT --と表示され、入力できる状態になります。
下記内容をコピペして張り付けましょう。
/etc/profile.d/rbenv.shexport RBENV_ROOT=/usr/local/rbenv export PATH="$RBENV_ROOT/bin:$PATH" eval "$(rbenv init -)"ただこのLightsailコンソールは直接のコピペができず、右下のノートマークを経由してコピペします。
そして黒い画面の文字のコピーはドラッグ、
張り付けるときは右クリックです。そのあと
ESC
とタイプすると左下の-- INSERT --が消えて、入力できない状態になります。
入力できない状態で
:wq
とタイプすると上書き保存されます。
※:q!
で保存せずに終了です。
こんな感じ。
このviコマンドでのファイル編集方法は今後も頻発するのでよく覚えておきましょう。
i
とESC
で入力モードと入力できないモードの切り替え- 入力できないモード状態で、
:wq
で上書き保存、:q!
で保存せずに終了です!
この一連の処理は、PCでいう環境変数の設定のようなもので、rbenvを用いたコマンドをどこからでも実行可能にする処理をコピペしたのです。つぎにLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.source /etc/profile.d/rbenv.shとくになにも起こりませんが、先ほど作成した
/etc/profile.d/rbenv.sh
ファイルの読み込みをおこなったイメージです。
読み込みを行わないと設定が反映されないのです。ではちゃんとrbenvがインストールされたか確認してみます。
Lightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.rbenv --versionつぎにLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.git clone https://github.com/rbenv/ruby-build.git /usr/local/rbenv/plugins/ruby-buildこれもruby-buildというRubyインストールに必要なツールをGithubからAmazonLinuxの
/usr/local/rbenv/plugins/ruby-buildディレクトリ
にコピーする処理です。では次にRubyのインストールに必要なその他ツールを一気にインストールしていきます。
Lightsailコンソールで下記コマンドを順に実行してください。Lightsailコンソール.yum -y groupinstall "Development Tools" yum -y install gcc72-c++.x86_64 glibc-headers openssl-devel readline libyaml-devel zlib zlib-devel libffi-devel libxml2 libxslt libxml2-devel libxslt-devel mysql-devel readline-devel問題なければ最後にComplete!と表示されるはずです。
ではようやく本題のRubyのインストールに移ります。
Cloud9と同じバージョンのRubyをインストールするのが良いので、まずはそれを調べます。cloud9コンソールで下記コマンドを実行してください。
cloud9コンソール.ruby -vではAmazonLinuxでもRuby2.6.0をインストールします。
Lightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.rbenv install 2.6.0つぎにLightsailコンソールで下記コマンドを順に実行してください。
Lightsailコンソール.rbenv global 2.6.0 rbenv rehash ruby -vこれは使用するRubyのバージョンを変更し、その結果ちゃんとRuby2.6.0がセットされたか確認する処理です。
問題なく最後に2.6.0とでたら成功です。
こんな感じです。
これでRubyインストール完了です。
大変ですね。Cloud9の便利さがよくわかります。
本番環境だけでなく、自力で開発環境構築するには、この処理が必要になるのです。bundlerのインストール
Ruby on Railsでの開発のとき、
bundle install
って使いましたよね。
WEBサーバのPumaとか(その他本当にたくさん)インストールしてくれるコマンド。
このコマンドを使えるようにするためにbundlerをインストールする必要があります。Lightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.gem install bundlerこれでbundlerのインストール完了です。
PostgreSQLのインストールと設定
Cloud9でもインストールしましたね。
同じように本番環境でもインストールします!Lightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.yum -y install postgresql94 postgresql94-server postgresql94-devel postgresql94-contrib postgresql94-docs最後にComlplete!と表示されたらOKです。
これらはPostgreSQLで必要な各種ツールをインストールしています。次にLightsailコンソールで下記コマンドを順に実行してください。
Lightsailコンソール./etc/init.d/postgresql94 initdb /etc/init.d/postgresql94 startこれはPostgreSQLの初期化と起動のイメージです。
次にviコマンドで
/var/lib/pgsql94/data/postgresql.conf
を編集しましょう。
Lightsailコンソールで下記コマンドを実行してください。Lightsailコンソール.vi /var/lib/pgsql94/data/postgresql.confそして
/var/lib/pgsql94/data/postgresql.conf
を下記のように編集します。
大項目が次のように並んでいる巨大ファイルです。
- FILE LOCATIONS
- CONNECTIONS AND AUTHENTICATION
- RESOURCE USAGE (except WAL)
- WRITE AHEAD LOG
- REPLICATION
- QUERY TUNING
- ERROR REPORTING AND LOGGING
- RUNTIME STATISTICS
- AUTOVACUUM PARAMETERS
- CLIENT CONNECTION DEFAULTS
- LOCK MANAGEMENT
- VERSION/PLATFORM COMPATIBILITY
- ERROR HANDLING
- CONFIG FILE INCLUDES
- CUSTOMIZED OPTIONS
2つめのCONNECTIONS AND AUTHENTICATIONを編集します。
デフォルトは下記のようになっています。【編集前】/var/lib/pgsql94/data/postgresql.conf# 以上省略 #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - #listen_addresses = 'localhost' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) #port = 5432 # (change requires restart) # 以上省略これを以下のように編集します。
変更点は次の2点です。
#listen_addresses = 'localhost'
→listen_addresses = '*'
#port = 5432
→port = 5432
【編集後】/var/lib/pgsql94/data/postgresql.conf# 以上省略 #------------------------------------------------------------------------------ # CONNECTIONS AND AUTHENTICATION #------------------------------------------------------------------------------ # - Connection Settings - listen_addresses = '*' # what IP address(es) to listen on; # comma-separated list of addresses; # defaults to 'localhost'; use '*' for all # (change requires restart) port = 5432 # (change requires restart) # 以上省略これはPostgreSQLへのアクセスできる条件の緩和をおこない、またPostgreSQLの使用するポート番号というものを有効化させる変更にあたります。
あまり気にせず、つぎに進みましょう。次にviコマンドで
/var/lib/pgsql94/data/pg_hba.conf
を編集しましょう。
Lightsailコンソールで下記コマンドを実行してください。Lightsailコンソール.vi /var/lib/pgsql94/data/pg_hba.confそして
/var/lib/pgsql94/data/pg_hba.conf
を下記のように編集します。
※/var/lib/pgsql94/data/pg_hba.conf
の一番下のほうの部分です。/var/lib/pgsql94/data/pg_hba.conf# TYPE DATABASE USER ADDRESS METHOD # "local" is for Unix domain socket connections only # local all all peer # IPv4 local connections: # host all all 127.0.0.1/32 ident # IPv6 local connections: # host all all ::1/128 ident # Allow replication connections from localhost, by a user with the # replication privilege. # local replication postgrespeer # host replication postgres127.0.0.1/32ident # host replication postgres ::1/128 ident local all all trust host all all 0.0.0.0/0 md5これはどの環境からそのデータベースにどのユーザがどの認証方式をつかってアクセスできるかを指定しています。
まあ、気にせず、次に進みましょう。つぎにLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール./etc/init.d/postgresql94 restartこれはPostgreSQLの再起動で、今まで編集したファイルを反映させる処理です。
つぎに
ec2-user
という名前でのPostgreSQLのデータベースを自由にコントロールできるユーザ(SUPERUSER)を作成します。
今後、データベースはRuby on Railsを経由して作成し、今回のRuby on Rails開発環境上のユーザの名前はec2-user
であるためです。
現段階ではあまり理解しなくて大丈夫です。
下記コマンドを打ち込みましょう。
つぎにLightsailコンソールで下記コマンドを実行してください。Lightsailコンソール.psql -U postgresするとpostgres=#と表示され、その後ろに下記コマンドを打ち込みます。
Lightsailコンソール.CREATE ROLE "root" WITH SUPERUSER LOGIN; CREATE ROLE "testapp" WITH SUPERUSER LOGIN; CREATE DATABASE "testapp_production"; \qそしてLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール./etc/init.d/postgresql94 restartこの処理は、rootとtestappという名前でのPostgreSQLのデータベースを自由にコントロールできるユーザ(SUPERUSER)を作成し、testapp_productionという名前のデータベースを作成しています。
これは今Lightsailで使用しているユーザ名や導入するRuby on Railsの仕様にそった処理となります。
そしてそのあとにPostgreSQLを再起動して追加したユーザやデータベースを読み込みます。
あまり気にせず、つぎに進みましょう。Nginxのインストールと設定
つぎにNginxというWEBサーバをインストールします。
Cloud9環境ではPumaというWEBサーバを利用していましたが、AmazonLinux環境ではNginxというWEBサーバとUnicornというアプリケーションサーバを利用します。
※それぞれメリットデメリットがあるらしいですが、難しいので私は分かりません。公開するということが目的で、かつ参考になる記事数を鑑みて、AmazonLinux環境ではNginxとUnicornという構成を選択しました。では細かいこと気にせず早速Nginxをインストールしていきましょう。
Lightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.yum -y install nginx最後にComplete!と表示されればインストール成功です。
次にLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.chkconfig nginx on /etc/init.d/nginx startこれはNginxが自動で起動するよう設定とNginxの起動処理です。
ではLightsailのOS詳細画面(下記の画面)の下の方のパブリックIPの数字を確認し、ブラウザのURL欄に入力してみてください。
Nginxのインストールと起動が問題なければこのように表示されます。
次にviコマンドで
/etc/nginx/conf.d/testapp.conf
を新規作成+カスタマイズしましょう。
※viコマンドはその後ろに存在しないファイルを指定すると新規作成+編集ができるのです。
Lightsailコンソールで下記コマンドを実行してください。Lightsailコンソール.vi /etc/nginx/conf.d/testapp.confそして
/etc/nginx/conf.d/testapp.conf
を下記のように作成します。
※ただし7行目のIPアドレスは各個人でことなります。
※先ほど調べたLightsailのOS詳細画面(下記の画面)の下の方のパブリックIPの数字を入力しましょう。
※Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築を参考にさせていただきました!/etc/nginx/conf.d/testapp.confupstream unicorn { server unix:/var/www/testapp/tmp/sockets/unicorn.sock; } server { listen 80; server_name 13.231.62.63; access_log /var/log/nginx/testapp_access.log; error_log /var/log/nginx/testapp_error.log; root /var/www/testapp; location ~ ^/assets/ { } location / { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_pass http://unicorn; } }Nginxは
/etc/nginx/conf.dconf.dディレクトリ
に●●●.conf
を作成すると、起動時に読み込んでくれます。
一般的にはアプリ名.conf
として作成するので今回はtestapp.conf
という名前のファイルを作成しました。
またその中で主に下記の設定を書いています。
- NginxがUnicornと連動する上で必要なプロセスやホストやポートの連携ファイルの設定
- Nginxのポート番号や使うサーバIPアドレスやトップページやエラーログ保管場所の設定
次にLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.nginx -s reloadこんな感じでなにも起こりませんが、Nginxが再起動し、
testapp.conf
の設定が読み込まれます。
全世界公開用のサーバでGithub公開ソースコードをもとに公開する
いよいよ終わりが見えてきました。
それではGithubで公開しているソースコードをAmazonLinuxに入れ込んで、アプリを起動して公開していきましょう。GithubからAmazonLinuxにソースコードを入れる
まずはGithubからAmazonLinuxにソースコードを入れていきます。
Githubにアクセス
https://github.com/
この画面の右上の緑色のClone or Downloadをクリックすると、
https://github.com/xxxx/yyyy.git
というURLが出てきます。
※xxxxはGuthub登録ユーザ名でyyyyはリポジトリ名なので皆さん異なります。そしてLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.git clone https://github.com/xxxx/yyyy.git /var/www/testappこれでGithubで公開しているソースコードがAmazonLinuxの
/var/www/testappディレクトリ
にコピーされました。
※つまり公開されているコードは全世界の人たちに使ってもらえるのです!ただし一部Githubの状態から変更しておきべき場所があります。
まずcloud9のコンソール部分で下記のように入力してEnterしてみましょう。【cloud9コンソール】.# 「$」の前の部分が「ec2-user:~/environment/testapp」となっていることをコマンド実行前に確認しましょう。 bundle exec rake secretこの出てきた乱数をコピペしておきます。
つぎにLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.vi /var/www/testapp/config/secrets.ymlで
/var/www/testapp/config/secrets.yml
を下記のように編集します。
※<%= ENV["SECRET_KEY_BASE"] %>
の部分に先ほどの乱数をコピペします。/var/www/testapp/config/secrets.yml# 以上省略 # Do not keep production secrets in the repository, # instead read values from the environment. production: secret_key_base: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxこの乱数はセキュリティレベルを上げるためのランダムな文字列です。
通常だとcloud9上で修正してAmazonLinuxにコピーしますが、そうするとGithubに公開されてしまうので、AmazonLinux内で直接編集しています。AmazonLinux上でアプリを起動させる
最後の一押しです。
ソースコードが入ったので、あとは起動させましょう。Lightsailコンソールで下記コマンドを実行して、ソースコードをいれたディレクトリに移動します。
Lightsailコンソール.cd /var/www/testapp次にLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.# 「#」の前の部分が「root@ip-xx-xx-xx-xx testapp」となっていることをコマンド実行前に確認しましょう。 bundle installもし下記のようなエラーが発生したら
/var/www/testappディレクトリ
でgem install nokogiri -v '1.10.3'
を実行した後で再度bundle install
を実行してみてください。
もし下記のようなエラーが発生したら
/var/www/testappディレクトリ
でgem install pg -v '0.21.0'
を実行した後で再度bundle install
を実行してみてください。
これはCloud9環境でも行った必要なRuby on Railsの起動に必要な各種パッケージをインストールする処理です。
次にLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.# 「#」の前の部分が「root@ip-xx-xx-xx-xx testapp」となっていることをコマンド実行前に確認しましょう。 rake db:migrate RAILS_ENV=productionこれはCloud9環境でも行いましたが、Ruby on Railsの特定のファイルの情報に基づいてデータベースの状態をカスタマイズしている処理です。
次にLightsailコンソールで下記コマンドを実行してください。
Lightsailコンソール.# 「#」の前の部分が「root@ip-xx-xx-xx-xx testapp」となっていることをコマンド実行前に確認しましょう。 bundle exec unicorn_rails -c config/unicorn.rb -E production -Dこんな感じでなんも起こりませんがUnicornが起動開始した状態になります。
では全世界に公開されたWEBサイトを見てみましょう。
LightsailのOS詳細画面(下記の画面)の下の方のパブリックIPの数字を確認し、ブラウザのURL欄に
xx.xx.xx.xx/blogs
と入力してみてください。
すべての処理がうまくいっていれば下記のような感じで全世界に公開されている状態になります。
終了です。お疲れ様でした!!!
診断
では診断を行います。
下記のなかでどの箇所が一番没入できましたか?もっとも没入したものを1つ選んでください。
没入とは、のめり込んで周りが見えなくなるくらい集中している状態です。
※楽しいとか面白いという感情とは異なります。
- AWSアカウントの作成
- Cloud9準備
- Cloud9で開発環境構築(ちなみに一瞬でカンタンです)
- いよいよ開発です
- 機能面でのカスタマイズ
- デザイン面でのカスタマイズ
- アプリケーション側での公開準備
- カギ作成
- Github登録
- Githubでのソースコードの公開
- LightsailでOS作成
- AmazonLinuxへのアクセス
- AmazonLinuxの最初の準備
- Rubyのインストール
- bundlerのインストール
- PostgreSQLのインストールと設定
- Nginxのインストールと設定
- GithubからAmazonLinuxにソースコードを入れる
- AmazonLinux上でアプリを起動させる
- では全世界に公開されたWEBサイトを見てみましょう
診断結果
転職、就職にかかわらず仕事選びで失敗しない要素の一つに没入できるかという要素があります。
没入できた部分がどのエンジニアポジションの仕事か?以下で没入したひとはサーバサイドエンジニアを選択すると失敗する可能性が低いです。
- いよいよ開発です
- 機能面でのカスタマイズ
- アプリケーション側での公開準備
とくに機能面でのカスタマイズで勝手にカスタマイズし始めたり、ソースコードをいじって検証とか、このキットで記載していないファイルを眺めたりしている人はドンピシャです。
以下で没入したひとはサーバサイドエンジニアを選択すると失敗する可能性が低いです。
- Cloud9で開発環境構築(ちなみに一瞬でカンタンです)
- カギ作成
- AmazonLinuxへのアクセス
- AmazonLinuxの最初の準備
- Rubyのインストール
- bundlerのインストール
- PostgreSQLのインストールと設定
- Nginxのインストールと設定
- GithubからAmazonLinuxにソースコードを入れる
- AmazonLinux上でアプリを起動させる
以下で没入したひとはフロントエンドエンジニアを選択すると失敗する可能性が低いです。
- デザイン面でのカスタマイズ
とくにデザイン面でのカスタマイズでデザインをいじり続けてすごい時間が過ぎてしまったみたいな人はドンピシャです。
以下で没入したひとは、その他の可能性を秘めていると思います。今回は診断範囲から外れてしまいます。すみません!
- AWSアカウントの作成
- Cloud9準備
- Github登録
- Githubでのソースコードの公開
- LightsailでOS作成
- では全世界に公開されたWEBサイトを見てみましょう
最後の片づけ
今回の1DAYキットでの使用でレベルですと、
AWSのcloud9は1年後課金対象に、Lightsailは1カ月後課金対象になります。
※2019/5/5時点の情報そのため、課金されたくない場合は下記手順にしたがってサービスを停止しましょう。
こちらにアクセスします。
https://lightsail.aws.amazon.com/ls/webapp/home/instances削除したいOSの部分の右の方の縦3点の部分をクリックして削除します。
こんな感じです。
つぎはこちらにアクセスします。
https://us-east-2.console.aws.amazon.com/cloud9/home削除したいCloud9開発環境をクリックして削除します。
こんな感じ。
これで大丈夫です。また作りましょう!
参考文献
とても参考になりました!ありがとうございます!!
CentOSにrbenv, Rubyをインストールする
unicornがエラーで起動しなくて困った
Rails + unicorn + nginx でWeb Serverを起動させるときにはまった話。
Amazon Linux上でRails新規プロジェクトを作成すると、bundle installで落ちる
Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築