ゲームエフェクトデザイナーのブログ | A Real-Time VFX Artist's Blog

About Making Materials on UE, Making Tools with C#, etc

Ruby + Rails でのアプリケーション作例情報

実際にアプリケーション作成を解説した動画や書籍をメモっておきたいと思います。

Udemyの動画


まずはこちら、Udemyのチュートリアル。評価も高いです。
ミニQ&Aサービス」が作例にあり、HerokuやGitを使ったネット公開まで含まれています。
(受講済みのMySQL + SQLの講座に、こちらのクーポンが付属していました)

こちらは「SNSアプリ」を作例に、ユーザー登録画面やログイン画面や他ユーザーのフォロー機能などを学んでいけるようです。

 

ブログ記事


作例ではありませんが勉強のフローについてまとめられているのでメモ。

 

書籍


こちらはお値段がそこそこ張る本格的なもののようです。
一通り終わらせると「TwitterみたいなSNS」が作れるそうな。。

他にも書籍ではこちらが気になります。
なぜなら「タスク管理アプリケーションを作ろう」というChapterがあるからです!

現場で使える Ruby on Rails 5速習実践ガイド

現場で使える Ruby on Rails 5速習実践ガイド

 

Kindle版はこちら。

現場で使える Ruby on Rails 5速習実践ガイド

現場で使える Ruby on Rails 5速習実践ガイド

 

 

 随時追加します。

Rubyを始めてみた5:ルーティング・データベース・テンプレート

前回に引き続き、こちらの Rails入門 の記事を進めていきました。

 

ルーティングの記事についてのメモ


ルーティングのための「routes.rb」内に記述は上から順に参照されるとのこと。

「rake routes」コマンドを実行すると下記のような情報が出てきます。
こちらについてはルーティング関連記事の最後の方で説明があるので、最初は気にせず進めるので良いと思います。

D:\data\rails\sample2>rake routes
Prefix Verb URI Pattern Controller#Action
rails_service_blob GET /rails/active_storage/blobs/:signed_id/*filename(.:format) active_storage/blobs#show
rails_blob_representation GET /rails/active_storage/representations/:signed_blob_id/:variation_key/*filename(.:format) active_storage/representations#show
rails_disk_service GET /rails/active_storage/disk/:encoded_key/*filename(.:format) active_storage/disk#show
update_rails_disk_service PUT /rails/active_storage/disk/:encoded_token(.:format) active_storage/disk#update
rails_direct_uploads POST /rails/active_storage/direct_uploads(.:format) active_storage/direct_uploads#create 


それから「root」メソッドの記述は下記で良いようです。
コントローラとアクションがURLと同じ場合は省略できるようで、そのあたりも後のステップでちゃんと解説されていました。

root to: 'info#index'

または

root 'info#index'


公式ガイドのルーティングのページもペタリ。
Rails のルーティング - Rails ガイド


「以前に使われていたルーティング」のステップは下記の内容で正常に動作しました。

[routes.rb]

get ':controller(/:action(/:id))(.:format)'


「matchメソッドを使った基本書式」もこちらでOKでした。

[routes.rb]

get 'disp' => 'books#show'


「HTTPメソッドの指定」は試してませんが Rails 5 では下記のような記述になるのではと‥

[routes.rb]

match 'disp' => 'books#show', :via: :get
match 'disp' => 'books#show', :via: :post


「リソースベースのルーティング」は記事の通りで問題なくいけました。

データベースの記事のメモ


お次はデータベースのステップに入っていきます。

まずMySQLを試すステップの際に、MySQLにログインできずバージョン確認もできません。

環境変数PATHを確認すると、ユーザー環境変数に「C:\Program Files\MySQL\MySQL Shell 8.0\bin\」が登録されているもののシステム環境変数には何も登録されておらずで。

以前、MySQL + SQLを試した際に MySQL5.7 をインストールしたので、今は「MySQL Server 5.7」と「MySQL Shell 8.0」がProgram Filesフォルダ内に存在している状態ですが、後者のフォルダ内には「mysql.exe」はありません。

そこでとりあえずシステム環境変数に「C:\Program Files\MySQL\MySQL Server 5.7\bin」を追加しました(PCの再起動はせず)。

しかしコマンドプロンプトで「mysql --version」と打ち込んでもエラー。
もしやと思ってコマンドプロンプトを起動し直したらいけました。。とりあえずホッ。

 

こちらの記事を参考にしました。
PATHを設定する | MySQLの使い方

ちなみに数日前にインストール時に決めたパスワードをすっかり忘れており、ちゃんとメモっていた数日前の自分に感謝しましたとさ。。

ちなみにMySQLの終了コマンドはこちら。

quit;

MySQLでデータベース作成コマンドを実行するステップでは、DLLが無い旨のエラーは出ませんでした。Rubyのbinフォルダ内に「libmysql.dll」は見当たらないですが良かったのかしら。。

そして実際に出たエラーはこちら。記事中のものとは少し違います。
rubymysql向けwin32APIの使用は非推奨」「mysql2/2.6/mysql2がロードできない」といった感じでしょうか。試しに「C:\Ruby26-x64\lib\ruby\gems\2.6.0\gems\mysql2-0.4.10-x64-mingw32\lib\mysql2」を開くと「2.6」フォルダが無くて「2.3」までしか存在しません。

C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/mysql2-0.4.10-x64-mingw32/lib/mysql2.rb:22: warning: Win32API is deprecated after Ruby 1.9.1; use fiddle directly instead
rails aborted!
LoadError: cannot load such file -- mysql2/2.6/mysql2
D:/data/rails/sample_mysql/config/application.rb:7:in `<top (required)>'
D:/data/rails/sample_mysql/Rakefile:4:in `require_relative'
D:/data/rails/sample_mysql/Rakefile:4:in `<top (required)>'
bin/rails:4:in `require'
bin/rails:4:in `<main>'
(See full trace by running task with --trace)


記事中では「MySQL Connector/C version 6.0.2」のインストールに進みますが、RailsはデフォルトがSQLiteということですし、ここからMySQLチュートリアルは行わずに進めることに。

またマイグレーション関連ともざっと流し読みに留めました。

テンプレートとヘルパーメソッド


こちら入門記事の最後の章となっていますが、早くアプリケーションが作りたくなったのでとりあえずリンクだけ貼っておいて、実制作のステップに入っていきたいと思います。

 

rails? rake?


ちなみにコマンドプロンプトで「rails」だったり「rake」だったりして紛らわしいなあと思っていたら実際紛らわしいようで‥ Rails 5 以降はrails」コマンドで全てOKだそうな。

覚えておこう。。

という訳で今回はここまで!

Rubyを始めてみた4:MVCの続き

前回に引き続き、こちらの Rails入門 の記事を進めていきました。

 

Scaffold機能について


コマンド1つでアプリケーションに必要なMVCを自動的に作成してくれるそうな。
前回はそれぞれの要素をコマンドで作成していきましたが、一括生成できるんですね。

rails generate scaffold モデル名

最初からデータベースのテーブルのカラムを指定する場合はこちら
rails generate scaffold モデル名 フィールド名1:データ型1 ...


コントローラの中身も定番なものが記述済みのようで‥これは素敵。。
いきなりデータベースのデータの追加フォームやら編集フォームやらが用意された状態になっているっぽいです。

なるほど、これがフレームワークというやつの姿なんですね!

ただ、自動で作成されたファイルやその記述がしっかりと理解できていないうちは頼らない方が良さそうとも思いました。「scaffold」についてググってみたらまさにそういった注意をされている記事が。

逆に言えば、MVCをなんとなく理解した後なら「良いお手本サンプル」として中身を追っていくというのは良さそうです。

あと、scaffoldで作成した後にデータベースを実際に作成してマイグレートを行う必要があるようなので忘れないようメモしておきます。

rake db:create

rake db:migrate

 

コントローラとアクション


引き続き Rails入門 の記事を進めていきました。その際のメモになります。

コントローラの作成コマンド

rails generate コントローラ名

アクションも同時に定義する場合
rails generate コントローラ名 アクション名1 アクション名2 ...
※この場合ビューも同時に作成され、routes.rb内にも記述が追加される

ちなみに、コマンド「rails server」は「rails s」で、「rails generate ~」は「rails g ~」で省略可能なんですね!めちゃ楽です。。

この時点で行っている様子を図にしてみました。

f:id:moko_03_25:20190504215815p:plain

繰り返しコントローラの作成とテストを行う過程で、徐々に理解できてきました。

その後のステップの「別のアクション用のテンプレートを呼び出す」では、コロン「:」の位置を下記のように変えないとRails 5ではエラーが出るかと思います。

render action: => 'アクション名'
render 'アクション名' ※actionを省略可能

render template: => 'コントローラ名/アクション名'
render 'コントローラ名/アクション名' ※templateを省略可能


ちなみに次のステップの「nothing」は作用しなかったので調べたところ、Rails 5 から render メソッドの nothing オプションは使えなくなったそうです。

参考にさせていただいた記事はこちら。

代わりに以下のような記述を使う模様。

head :no_content ※こちらは私の場合うまくいきませんでした

render body: nil ※こちらで真っ白なページが表示できました

head :ok ※こちらも真っ白なページが表示できました

 

ステータスを404に変更できない?


コマンドプロンプトでPumaでサーバー接続中に Curl を使って問い合わせる方法というのがよく分かりません。。なのでステータスを 404 に指定した際の確認ができていません。それとも停止してから実行?

リクエストが成功するとログには「200 ok」と表示されてしまいます。

とりあえずコントローラに記述するアクションを「head 404」や「head :not_found」にすれば、htmlが用意されていたとしても Not found のページを表示できることは確認しました。

レイアウトを使用できない?


テキストを直にブラウザに表示する際に、下記のように記述することでレイアウトを使用できるということですがうまくいきません。エラー内容は「デフォルトレイアウトが無いよ」みたいな感じですが、軽くググってみても分からず。。

render plain: "Hello!", layout: true

とりあえず学習を進めていくうちにレイアウトについても分かると思うので進めます。

JSON/XML形式での出力について


まず、下記のようにJSON形式での出力を試してエラーも無くアクセスできたのでうまくいってそう? 例によってCurlを使った確認方法が分からないので、とりあえず進めます。

personal = {'name' => 'yamada', 'old' => 28}
render json: personal


お次に、下記のようにXML形式での出力を試したところ、入門サイトと同様の結果になったのでこちらもうまくいってる感じでしょうか。

personal = {'name' => 'yamada', 'old' => 28}
render xml: personal

 

リダイレクトについて


まず「src1」の記述はこちらでうまくいきます。

redirect_to action: 'dest'


しかし「src2」は実行そのもののエラーは出ませんが、ブラウザ上のページには「このページは動作していません localhost から無効な応答が送信されました」と表示されます。
自分自身のパスを含めることができない感じでしょうか?

redirect_to 'plans/dest'

 

パラメータの取得について


うーん。記事を参考にパラメータ取得を試みるもうまくいきません。
徐々にうまくいかないケースが増えてきました。。

●routes.rb の中身
get 'travels/show' => 'travels#show'

●travels_controller の中身
def show
    render plain: "upper = #{params[:upper]}" + ", lower = #{params[:lower]}"
end


しかしその後のクエリでのパラメータ取得はうまくいきました。

POSTを使って送信されたパラメータの取得について


こちらは post.html の表示はうまくいきますが(この時、アクセスするURLは「http://localhost:3000/post.html」なのでご注意)、送信ボタンを押してページを移動すると下記のようなエラーが表示されます。「無効な認証トークン」だと注意されます。

ActionController::InvalidAuthenticityToken in TravelsController#show


とりあえずコントローラに「protect_from_forgery」と一行追加すれば正常に動作しました。

class TravelsController < ApplicationController
    protect_from_forgery
    def show
        render plain: "旅行先 = #{params[:dest]}, 人数 = #{params[:num]}"
    end
end


こちらの記事を参考にさせていただきました。

パラメータでハッシュを渡したり配列を渡す手順も無事に記事の通りに動作しました。

とりあえず今回はここまで!

続きはこちら。
Rubyを始めてみた5:ルーティング・データベース・テンプレート - ゲームエフェクトデザイナーのブログ (新)

Rubyを始めてみた3:MVCの一連の流れ

前回に引き続き、こちらの Rails入門 の記事を進めていきました。

RailsにおけるMVC(モデル / ビュー / コントローラ)の作成に入っていきます。
ただ、初めての概念ばかりで何をしているのか把握しづらかったので図を作りました。

まず最初にコントローラで直にhtmlを書き換えていますが、このようなイメージかなと。

f:id:moko_03_25:20190504163507p:plain

次のステップでテンプレートと変数を使ってhtmlを書き換えていますが、こんな感じかなと。

f:id:moko_03_25:20190504163501p:plain

さらにデータベースを制御するステップはこんな感じ?(間違ってるかも)

f:id:moko_03_25:20190504175521p:plain

これで何をしているか把握しやすくなった気がします。

使用しているエディタ


最初は秀丸を使っていましたがツリー表示が無いと不便だったのでATOMに変更。

f:id:moko_03_25:20190504165244p:plain

 

起こったエラーなど


まずはコントローラのアクションメソッドでテキストを「render」で直に出力する解説をされていますが、後の起動時にうまく動作しませんでした。

下記のように変えたらいけたらのですが、Railsのバージョンによるものでしょうか。。

def hello render plain: 'Hello!' end
def bye render plain: 'bye!' end

 

ちなみにこの「plain」については、こちらの記事を参考にさせていただきました。

そして、実際にアプリケーションを起動すると下記のようなエラーが起きました。

C:/Ruby26-x64/lib/ruby/gems/2.6.0/gems/actionpack-5.2.3/lib/action_dispatch/routing/mapper.rb:81:in `check_via': You should not use the `match` method in your router without specifying an HTTP method.
(ArgumentError)
If you want to expose your action to both GET and POST, add `via: [:get, :post]` option.
If you want to expose your action to GET, use `get` in the router:
Instead of: match "controller#action"
Do: get "controller#action"


「matchを使わずgetを使え」という感じの内容になっています。

こちらに関しては「teratail」でドンピシャで質問されている方がいらっしゃいました。
Ruby - Ruby on Railsでルーティングのエラー|teratail

つまるところ下記のように記述すれば良いようです。

get 'hello' => 'booklist#hello'
get 'bye' => 'booklist#bye'


これで無事うまくいきました。ありがたや。。
もしも match をそのまま使う場合はオプション指定が必要だそうで‥

match 'hello' => 'booklist#hello', via: :get
match 'bye' => 'booklist#bye', via: :get


こちらでいけました。
「via: :オプション(今回の場合は get )」を最後に付与すれば良いようです。

ちなみに「=>」は「, to:」でもいけるようで、前者の方が記述は楽ですが、ググると後者で解説されているケースが多いので知っておくと良いかと思いました。

ついでに、ルーティング周りで参考になりそうな記事もいくつかペタペタと。

 

文字コードについて


下記のテンプレートの作成の手順では文字コードについての解説があります。
ビューの作成とデータの受け渡し - Ruby on Rails入門

手元で試したところ、Rails用に作成するテキストファイルは基本的にUTF-8で保存しておけば、日本語を使用していても「# coding: utf-8」や「#! ruby -Ks」を記述しなくてもエラー無く正常に表示できました。

データベース制御のメモ


データベースの作成

rake db:create


モデルの作成

rails generate model モデル名


マイグレーションスクリプトの実行(テーブルの追加)

rake db:migrate


テーブルにデータを追加

rake db:seed


SQLiteコマンドラインツール起動と終了

rails dbconsole 起動
.quit 終了


指定のテーブルからSQLの構文で全データを取得

select * from テーブル名


データベースの情報をHTMLに反映させる流れまでうまくいきました。

とりあえず今回はここまで!

続きはこちら。
Rubyを始めてみた4:MVCの続き - ゲームエフェクトデザイナーのブログ (新)

Rubyを始めてみた2:Ruby on Rails 導入

前回に続いてRubyの習得を進めていきます。

引き続きこちらのシリーズ記事にお世話になります。

SQLiteのインストールの手順でDLしたファイル「sqlite-dll-win64-x64-3280000.zip」と「sqlite-tools-win32-x86-3280000.zip」は私の場合は「C:\Ruby26-x64\bin」の中に入れる形でした。
・SQLite3-1.4.1
・DLしたファイルのバージョンは 3.28.0

いろいろメモ


Dドライブへの移動

cd /d D:


railsで新しいアプリケーションを作成する

rails new アプリケーション名

 

アプリケーション作成時の対応について


チュートリアルで「books」というアプリケーションを作成する手順がありますが、実行すると「Bandle complete!」というメッセージに続いて下記のような注意書きが表示されました。

NOTICE: chromedriver-helper is deprecated after 2019-03-31.

Please update to use the 'webdrivers' gem instead. See https://github.com/flavorjones/chromedriver-helper/issues/83


「chromedriver-helper」は使わずに「webdrivers」を使うようにということのようです。

という訳でこちらの記事を参考に移行しました。

今アプリケーションを作成したフォルダ直下に「Gemfile」という拡張子の無いテキストファイルがあるので適当なテキストエディタで開いて54行目あたりの「gem 'chromedriver-helper'」を「gem 'webdrivers'」に書き換えて保存。

その後コマンドプロンプトで「Gemfile」が入っているフォルダへ移動して「bundle install」を実行すれば再度インストールされて移行完了となります。

ウェブサーバーアプリケーションの起動について


WEBrickサーバーを起動する方法を解説されていますが「Puma」が起動してしまいます。軽くググってみたところ、Rails 5 からデフォルトのサーバーが Puma に変わった様子。

Pumaで試してみて全く問題ない感じでしたが、一応チュートリアルに合わせるために WEBrick で起動する方法もメモっておきます。
また、Puma も WEBrick も Ctrl + C で正常にサーバーを停止できました。

起動
rails server ※Rails 5 からは Puma が起動してしまう

起動(WEBrickを指定)
bundle exec rails server webrick ※こちらでうまくいきました

ブラウザでの確認先アドレス
http://localhost:3000/

停止
Ctrl + C


ちなみに、チュートリアルのように「Welcome aboard」ページが表示されず「Yay! You’re on Rails!」というタイトルのページが表示されますが、こちらでバージョンだけは確認できるのでこれで良いのですかね。。

publicフォルダを開いても「index.html」ファイルが見当たらないのですが、チュートリアルの「静的コンテンツの表示」まで進めると「index.html」の中身を書き換えて確認する手順が解説されるので、この時点で作成してlocalhostにアクセスしたら無事に Hello world!」が表示されました(start.htmlに変更する部分はスルーして実施しました)。

Railsの理解


何も無いところからアプリケーションを作成するのではなく、ひな型を自動で作成してそこから必要な個所を修正していくものだと最初に説明されています。RailsRubyフレームワークということなので、基本的な構成はすでに豊富に用意されているということなんでしょうね。

また「MVC(モデル/ビュー/コントローラ)」という単語もよく登場します。
こちらの概念についても図で説明されているのでペタリ。
RailsにおけるMVC(モデル/ビュー/コントローラ) - Ruby on Rails入門

MVC」でGoogle画像検索すると同じような図が沢山出てきます。
自分なりに分かりやすい図にしてみました。

f:id:moko_03_25:20190504163515p:plain

MVCについて、具体的にどう制御していくかはこちらから徐々に入っていくようです。
コントローラとアクションの作成とルーティングの設定 - Ruby on Rails入門


とりあえず今回はここまで!

続きはこちら。
Rubyを始めてみた3:MVCの一連の流れ - ゲームエフェクトデザイナーのブログ (新)

Rubyを始めてみた1:基本構文

MySQLSQLなどデータベース周りやサーバー構築周りを勉強中ですが、動機としてはC#で作ったタスク管理アプリを複数人で使えるようにしたいというのが1つ。

こちらを実現するには、以下のようなあたりを勉強する必要がありそうだなと。

・アカウント登録と管理、ログインやログアウトの仕組み
・アカウントごとのタスク管理アプリに対するパーミッションなどの設定や管理
・サーバー上にデータベースを構築してタスク管理アプリとやり取り
 (タスクの複数アカウントからのリアルタイムでの編集が可能に)
・ネットワークやセキュリティの知識

それだけではなく、仕事でも大量のアセットの情報をデータベースで管理して、ウェブサービス上で情報を表示したり何かしら集計したりといったようなことにも知識を活かせたらという思いもあります。

ただし仕事だとプログラマさんにお願いして実現してもらえたりするので、そういった知識を得ておくことでプログラマさんとのコミュニケーションがスムーズになれば良いなという感じです。

それから、ウェブアプリを作ってみたいという思いがジワジワと増してきています。

というのもTwitterのモーメントを試してみたらとても使い辛い上に100件超えたら古いものから消えていくという仕様を耳にしたりして、これ以上使う気になれなかったりしたので、自分にとって使いやすい形でカテゴリ別にフィルタできる過去ツイート閲覧アプリが作りたいといった感じです。

ツイートにタグを付与できてタグでフィルタして一覧できたらそれで十分という感じで。

内部的にはツイートの投稿IDと、あらかじめ登録したタグの紐付けをデータベースで管理して、諸々の操作をブラウザ上で完結できたら良いなあと。

サイトのイメージとしてはTwilogのような感じが理想です。
Twilog - Twitterのつぶやきをブログ形式で保存


もう少し細かく要件を書き出すと以下のような感じになるかと思います。

●ブラウザ上でTwitterのアカウントIDを指定してタイムラインを一覧できる
 Twilogのように年/月/日を指定してリストアップできる
 Twitter公式アプリのように画像や動画のサムネイルも表示したい

●ブラウザ上でタグの新規登録、削除、リネームが行える

●タグをデータベースのテーブルで管理

●ブラウザ上でTwitterの一覧から、指定ツイートにタグを紐付けられる
 タグの付与(複数可)と解除が行える

●ツイートの投稿IDとタグIDの紐付けをデータベースのテーブルで管理する

●ブラウザ上でタイムラインを一覧する際にタグを指定してフィルタリングができる

でもって最終的にはiPhoneアプリ化して通勤時などの隙間時間にタグ付与作業ができたらいいなあと。実現に何年かかるか分かりませんが。。

具体的に習得が必要な要素として、Ruby/PHP/Pythonなどによるアプリの実装周り、HTML/CSS/JavaScriptなどのブラウザでの表示周り、サーバーとの通信、あと以前軽くTwitter公式APIを試しましたがもっとちゃんと色々調べないといけなさそうだなと思うと、こりゃ大変そうですね。

それから、RubyPHPPythonのどちらが良いのだろうと思った際に、アーティストとしては仕事でもストレートに役に立つPythonでいきたいところですが、ウェブアプリを作る解説の多さとライブラリの充実面で言えばRubyPHPという感じなのでしょうか。

※実は最初にPythonでウェブアプリ開発をやってみたいと思って試そうとしたのですが、Python3 + Vagrant + Django の環境構築の時点でうまく動作せず原因が分からなくなっていきなり頓挫したという経緯もあります‥(もうちょい調べれば進めたかもですが気分転換のため一旦ストップしました)

ウェブエンジニアな方にご相談したところRubyRailsフレームワークがおすすめと教えていただいたこともあり、ひとまずRubyを軽く触ってみたいと思いました。

環境構築


まずRubyのDevkit付きインストーラーをDLして実行します。
Railsを使いたい場合はDevkit付きになるようです。

こちらの記事を参考にさせていただきました。
Rubyのダウンロードとインストール | Ruby入門 | RubyLife

ちなみにこの記事の時点で最新の「Ruby 2.6.3p62」をインストールしました。

そもそもこちらのサイト、チュートリアル記事が非常に充実しています。。
Ruby on Rails 入門」シリーズではウェブアプリを作成する手順が学べるようです。

そして Rails のインストールも同サイトの記事を参考にさせていただきました。
Railsをインストールする | Ruby on Rails入門 | RubyLife

この記事の時点でインストールした Rails のバージョンは「Rails 5.2.3」になります。

その後に進めた学習内容


同サイトの「Ruby入門」の記事を順に見ていきました。
https://www.javadrive.jp/rails/

7年前の記事のようなので今のバージョンでは書かれている通りにいかない箇所も色々とありますが、そのあたりは全て解決方法をメモっています。

他にはドットインストールの「Ruby入門(全26回)」を進めるのも良いと思います。
https://dotinstall.com/lessons/basic_ruby_v3

Rubyのリファレンスマニュアルはこちら。
オブジェクト指向スクリプト言語 Ruby リファレンスマニュアル (Ruby 2.6.0)

以下は軽いメモ。

Rubyのファイルは「~~.rb」
コマンドプロンプトで「ruby ファイル名」で実行
・処理の最後に「;」は無くてOKだし入れても良い
・1行コメントは「#」、複数行は「=begin」と「=end」で括る
・「#! ruby ~~」で始めるとコマンドラインプションの指定が可能
・日本語を表示するなら「#! ruby -Ks」を先頭に記述しておくと良い(Shift-JIS指定)
・定数は大文字で宣言

基本構文はPythonと共通点が多いですね。

ちなみに文字コード関連の記事はうまくいったりしかなかったりしました。
上記リファレンスマニュアルによると2.6.0以降はエンコーディング周りは色々と変わったようで「$KCODEは廃止されました」とあります。。
多言語化 (Ruby 2.6.0)

クラスの定義

class クラス名 ※先頭は大文字で書くと良い
 ~~
end


クラスの定義(いわゆるコンストラクタがある場合)

class クラス名 ※先頭は大文字で書くと良い
 def initialize()
  ~~
 end
 ~~
end


メソッドの定義

def メソッド名(引数1, 引数2, ...) ※先頭は小文字で書くと良い
 ~~
end


モジュールの定義

module モジュール名 ※先頭は大文字で書くと良い
 ~~
end


とりあえず今回はここまで!

続きはこちら。
Rubyを始めてみた2:Ruby on Rails 導入 - ゲームエフェクトデザイナーのブログ (新)

サーバー構築を試してみた:AWS

サーバーを構築してみたいと思ってドットインストールのレッスンを色々と進めてきました。

サーバー構築を試してみた:AWS Clou9
サーバー構築を試してみた:ローカルサーバーの構築1
サーバー構築を試してみた:ローカルサーバーの構築2

お次は「AWSAmazon Web Services)入門(全17回)」をやってみました。

https://dotinstall.com/lessons/basic_aws

これまではPHPとかRubyといった開発環境を色々インストールして、ちょこっと試してみたら終わりという感じのシンプルなものでしたが、今回は「ファイアウォール」とか「SSH」とか「データベース立ち上げ」とか「ロードバランサー」とか、これぞサーバー構築!といった感じの単語が目次にあるため期待しつつ開始。

出てくる用語


EC2(Elastic Compute Cloud)
 仮想サーバーのこと

RDS(Relational Database Service)
 データベースに特化したサービス

S3(Simple Storage Service)
 ファイルを色々とアップできるストレージサービス

EBS(Elastic Block Store)
 仮想サーバーを作成した際に作成されるボリューム

レクチャーを進めていった際のメモ:インスタンス作成


まず最初のアカウント取得とリージョンを設定したりは同じドットインストールの「AWS Cloud9 入門」のレクチャーで解説されているのでそちらが参考になるかと思います。

インスタンスを立ち上げる手順では、レクチャー動画の時点とはAWSのサイトのデザインがかなり変わっていますが、メニューの「サービス」から「EC2」を選んで「インスタンスを作成」ボタンを押せばOKです。

Linuxディストリビューションを選択する手順では、現在は「Amazon Linux 2 AMI」と「Amazon Linux AMI」の2種類から選べますが、「2」の方は新しい代わりにそれまでの設定方法が色々違っているっぽいので後者の方が良さそうです。

インスタンスタイプは無料枠で選べるのが「現行世代」で1つしか無いので一択ですね。。

動画で「Availability Zone」の選択手順がありますが、サイト右下の「次の手順:インスタンスの詳細の設定」を押した先のサブネットの項目で「ap-northeast-1a」を選ぶことができました。

この辺り軽くググった時に解説されている記事をペタリ。

それからTermination Protectionについての手順は「シャットダウン動作」「削除保護の有効化」という項目がそれにあたる感じでしょうか。

キーペアの入力の工程は今のサイトでは後から登場します。

セキュリティグループの設定は名前を一応レクチャー動画に合わせて「quick-start-1」に変えて、ルールも動画と同じくHTTPを追加しました。

・タイプ SSH   | ポート 22 | ソース 0.0.0.0/0
・タイプ HTTP | ポート 80 | ソース 0.0.0.0/0

最後にキーペアを「新しく作成」して、レクチャー動画と同じく「taguchi」と入力して作成して、キーペアのファイルもDLしておきました。

その後インスタンス作成が完了するとステータスが確認できるページに飛びますが、AWS Cloud9 のレクチャーも行っていた場合はそちらも並んでいるかと思います。

セキュリティグループの確認の手順は「説明」タブ内の「セキュリティグループ」の項目にある「インバウンドルールの表示」というリンクをクリックするとポップアップ表示されて確認できます。

Instance Actionsに関して「Terminate」はインスタンスを削除してしまうので注意と説明されていますが、ページ上部の「アクション」プルダウン内の「インスタンスの状態>終了」がそれにあたる感じでしょうか。削除とは書かれていないので、うっかり停止しようとして終了を選んでしまいそうですね。。

レクチャーを進めていった際のメモ:インスタンスへの接続


レッスン#05の動画ではここでいきなりターミナルみたいなものでコマンドを打ち込み始めますが、どうやらSSHでサーバーに接続するためのクライアントアプリを何かしら使う必要があるようです。

Windowsでローカルサーバー構築のレクチャーにも登場した「PuTTY」を使うのがポピュラーなようなので 、こちらをインストールして使うのが良さそうです。

手順について解説されている公式ドキュメントのURLを貼り付けておきます。

まずは「PuTTY」本体ではなくスタートメニューから「PuTTYgen」を起動して、プライベートキーの変換を先に行っておく必要があるようです。

上記ドキュメントの手順通りに進めて、あらかじめ作成しておいた「~~.pem」ファイルをロードして、同じ名前で「~~.ppk」ファイルを出力する流れになります。

次に「PuTTY」で設定を行いますが「Host Name (or IP address)」に何を入力すれば良いのかというと、Amazon Linuxなのでユーザー名は「ec2-user」で@の後ろのパブリックDNSネームはAWSインスタンスのページの説明タブ内の「パブリックDNS (IPv4)」の項目内容をまるっとコピペすればOKです。

つまり下記のような感じになります。

ec2-user@ec2-54-ほにゃらら.ap-northeast-1.compute.amazonaws.com

成功するとコマンドプロンプトのような、PuTTYの真っ黒いウインドウが表示されて、コマンドを受け付ける状態になります。

そうしたらレクチャー#05 の 1分11秒 あたりまで進んだということになるかと思います。

その後「yum update」コマンドでアップデートしますが、完了後にインスタンスを再起動した方が良いようなのでAWSのページから行いました。そうするとPuTTYからの接続も再度行う必要があります。

レクチャーを進めていった際のメモ:htmlの作成


レッスン#06でhtmlを作成して試す工程がありますが、AWS Cloud9 のレクチャーで登場した‥「i」キーで編集モードに移って「esc」キーを押して「:wq」を入力、Enterキーで編集完了‥という流れで行う必要があります。

私の方でも無事、ブラウザからアクセスして「Hello!」の表示を確認できました。

その後、IPアドレスを作成してインスタンスに関連付けして、試しに手元のiPhoneのブラウザでアクセスできるのも確認。ちょっと感動。。

サーバーのスペックを上げるのも、一度インスタンスを停止してプルダウンからスペックを選んでまたインスタンスを再開するだけというお手軽操作で驚きました。。

レクチャーを進めていった際のメモ:データベースの作成と接続


データベースを作成後のステータス確認画面が、EC2のインスタンスのページ構成とはまた少し違いますね。スペック変更はデータベースの詳細ページの右上にある「変更」ボタンを押すと行えるのが確認できました。

次に「DB Security Group」の設定の工程ですが、データベース「mydbinstance」のページで「接続とセキュリティ」の項目を確認すると「VPC セキュリティグループ」にリンクがあり、すでに関連付けされているのでこちらで良いのでしょうか‥

しかしPuTTYで接続を試みて、パスワードを聞かれますが最初に設定したパスワードを入力してEnterを押すと、しばらく応答が無くて不安になってきたあたりで接続できませんでしたとエラーが表示されてしまいます。

その後に色々と試してうまくいったのでメモしておきます。

まず今起動中のEC2のインスタンスのページを表示して「説明」タブの「セキュリティグループ」の quick-start1のリンク先に飛んで、グループID(sg-で始まる内容)を適当なテキストエディタにでもコピペしておきます。

次に、AWSのデータベース「mydbinstance」のページの「接続とセキュリティ」タブを開いてページ下の方を見ると「セキュリティグループのルール」という項目があるので「rds-launch-wizard(sg-~~)」のリンクを開きます。

セキュリティグループが表示されたら「インバウンド」タブを開いて「編集」ボタンを押し、ソースのアドレスを先ほどコピペしておいたグループIDを入力します。

インバウンド

タイプ:MYSQL/Aurora
プロトコルTCP
ポート範囲:3306
ソース:sg-ほにゃらら~~


これでOKです。
PuTTYで以下のようにコマンドを入力します。

mysql -h エンドポイントをコピペ -P 3306 -u dbuser -p dotinstall


そしてパスワードを聞かれたら、データベース作成時に最初に設定したパスワードを入力して無事に接続できました。その後の「show databases;」でもちゃんと表示されました。

 

残りのレクチャーは、サーバーを複製する形で増設して、ロードバランサー(アクセスを分散したりできる)を設置してみたり、ストレージサービスのS3を使って画像をアップしたりウェブページをアップしたりといった内容になります。

とりあえず、何となくサーバー構築の流れが以前よりもう少しイメージを掴めたので行ってみてとても良かったです。

余談


ちなみに余談になりますが、こういった事例を教えていただいたことがあります。

とても恐ろしい‥!

こちらのようにシークレットキーを公開とかはしていませんが、念のためチュートリアルを終えた後はEC2インスタンスを削除して、料金が発生したらメールで通知があるよう設定しました。。

あと気になるのは無料期間が終わった時の料金ですよね。
こんな記事も。

月8000円は払えないですね。。

何かウェブアプリを作って公開する際のサーバーは自宅ではなくレンタルが良いと思っているので、色々検討してみたいと思います。

Jenkinsを試してみた + バッチファイル関連

ゲーム開発で何かを自動で実行して通知をもらうような際にJenkinsジェンキンス)とやらが使われている‥というのは知ってはいましたが、具体的にどんな感じで設定するのかなど全く知らなかったので、プログラマさんと会話できるようとりあえずちょこっと触ってみました。

ググっていくつか出てきた中ではこちらの記事が入門に良いチュートリアルになっていて、とてもお手軽に試すことができました。

ただしJenkinsをインストールした直後に開くウェブページが表示されません。
(Windows10環境です)

こちらの記事を参考にアドレスを「127.0.0.1:8000」に変えたらいけました。

残りの手順については特に問題もなくいけました。

Windowsのタスクスケジューラみたいな感じで登録していけるんですね。
ブラウザで設定できてお手軽で、メニューも日本語表記なので安心。。

とりあえず触ってみたところで‥自分の場合は何に使ったものか。。

タスクスケジューラについて


ついでにタスクスケジューラにタスクをバッチファイルで追加する方法も調べてみました。

というのも、以前タスクスケジューラへの登録をマニュアルを書いてチームメンバーにお願いしたことがありましたが、どう考えてもバッチファイルで登録してもらう方が良いですよね。。

次に同じような場面があったらこちらを試してみたいと思います。

ちなみにC#で登録したい場合に、タスクスケジューラから一旦設定をエクスポートして生成されたxmlを使う方法(なるほど~!)が良さそうだったのでこちらもペタリ。

 

バッチファイル作成について


ついでにバッチファイル関連の良さげな記事があったのでこちらもペタリ。

インターネット用語について調べた時のメモ

ざっと一覧にしています。

これらをさらに深く調べていけば良さそうです。

●サーバー

 ネットワークを介してサービスを提供するコンピュータ、またはソフト
 ホストとも言う
 管理者 Administrator(アドミニストレータ
 ・メールサーバー
 ・Webサーバー
 ・アプリケーションサーバ
 ・ファイルサーバー
 ・プリントサーバー

●クライアント
 サーバーに対して、サービスを利用するコンピュータ、またはソフト
 ・LANクライアント
 ・TCP/IPクライアント
 ・シンクライアント

●クライアント-サーバモデル(C/S)
 クライアントとサーバーを分離するモデル
 ・DNS
 ・DHCP

P2Pモデル(ピア・ツー・ピア)

IPアドレス
 ネットワークの世界での住所 送信先
 現在使われているのは「IPv4」方式 0~255の数字x4つ並んだもの
 今はIPv6へ移行する流れ
 ・プライベートアドレス
  学校や企業、家庭内などで端末を特定するもの
  クラスCの192.168.n.nで始まるアドレスを多く使用する
 ・グローバルアドレス
  インターネット上で端末を特定するもの
  一般的にインターネットサービスプロバイダによって割り当てられる
  大抵のプロバイダでは自動的にグローバルアドレスを割り当てる

MACアドレス
 IPアドレスが最終的な送信先なのに対してMACアドレスは次の送信先
 様々なルータ等を経由するため、次々と中身が変わる

通信プロトコル
 ネットワーク上での通信に関する規約を定めたもの
 「通信規約」や「通信手順」と訳す
 プロトコルって何?
 https://www.wanichan.com/beginner/pc/network/net05.htm
・HTTPプロトコル
 Webサーバーと私たちのパソコン(クライアント)とのデータのやり取りをする
 http://~~
 ・ドメイン(Domain Name)
  IPアドレスが数字の羅列なので分かりやすく名前を付けたもの
 ・DNS(Domain Name System)サーバー
  IPアドレスと紐付くドメインを管理するサーバー
TCP/IP
 TCP は Transmission Control Protocol の略で、伝道制御プロトコル
 IP  は Internet Protocol の略で、ネットワーク間プロトコル
 データを他の離れたパソコンに送る場合、小分けにする その単位が「パケット」
 沢山のパケットをバラバラに送る それがIP
 バラバラのパケットの集まりを検分して全て揃ってるか確かめたり順番通りに並ばせるのがTCP
FTP(ファイル・トランスファープロトコル
 ネットワークでファイルの転送を行うための通信プロトコルの1つ

●サーバー
「サービスや機能を提供する側のコンピュータ」

DHCPサーバー
 IPアドレスを割り当てる仕事をするコンピュータ
 DHCPは「コンピュータにIPアドレスを自動割り当てする仕組み」

●インターネット
 全世界を繋ぐ巨大なTCP/IPネットワーク
 多数のネットワーク(サブネット)に分けて管理される
 ネットワークアドレスは、これらのネットワークを識別するためのアドレス
 各ネットワーク(インターネット・サービス・プロバイダなど)に決まった範囲が割り当てられている
 日本では日本ネットワークインフォメーションセンター (JPNIC) によって、ネットワークアドレスが一意になるよう管理されている

●サブネット
 巨大なネットワークに対してある程度小さな規模に分けた多数のネットワーク

サブネットマスク
 IPアドレスのうちネットワークアドレスとホストアドレスを識別するための数値
 11111111 11111111 11111111 00000000 の場合
 255.255.255.0 または 0xFFFFFF00 と表す
 
●ルートテーブル / ルーティングテーブル
 ルーターやネットワーク接続されたコンピュータが持つ、
 個々のネットワークの宛先への経路の一覧を保持しているテーブル状のデータ構造
 荷物を届ける際の地図のようなイメージ

ゲートウェイ
 コンピュータネットワークをプロトコルの異なるネットワークと
 接続するためのネットワークノード

●プロキシ(Proxy)/ プロキシサーバー
 ”代理”という意味
 自分のパソコンに変わってWebサイトにアクセスしてくれるサーバーのこと
 高速なアクセスや安全な通信などを確保するための中継サーバー

ちなみに‥

「サーバー」なのか「サーバ」なのか迷うところで、基本的に「-」で伸ばしたくない派なのですが、新聞記者やライターでは「サーバー」が標準ということでそちらに合わせています。。

サーバー構築を試してみた:ローカルサーバーの構築2

前回、古いWindowsマシンでフォルダ共有を試してみて、それだけでヒーヒー言ってた訳ですが、お次にまたドットインストールで「ローカル開発環境の構築 [Windows編](全14回)」をやってみました。
https://dotinstall.com/lessons/basic_localdev_win_v2

ローカルサーバーを構築する方法は色々あるそうですが、このレクチャーでは VirtualBox を使った仮想環境にLinuxCentOSをインストールしてサーバー構築する方法を学べるということでした。

レクチャー動画に沿ってインストールしたもの


レクチャー動画のものからバージョンが色々上がっているので、メモしておきます。

VirtualBox 6.0.6
Vagrant 2.2.4
CentOS 6.8?
Putty 0.71 SSHを使ってサーバーにリモート接続するためのツール?
・git + アプリケーション設定用のスクリプトをgitからDL
 実行すると勝手に色々インストールしてくれるようです
 ・Ruby 2.3.1?
 ・Python 3.5.2(libselinux-pyton)?
 ・Remi(Python REMoteインタフェースライブラリ)?
 ・Man?
 ・Apache
 ・gd-last?
 ・PHP
 ・MySQL
 ・Node.js?
 ・Npm(Node Package Manager)?
CyberDuck 6.9.4 ファイル転送ツール

Puttyは動画内のURL先と少し違いますがこちらからDLできます。

こちらのレクチャーの感想


まず、ローカルサーバー構築について図を使って分かりやすく解説されていて、それがとても良かったです。

ただしvagrantでの設定からは動画の通りにコマンドをコピペして実行していくだけなので、どのタイミングで何がインストールされているのか、どういった設定がされているのかなどの説明があまり無く、自分で調べないことには得られるものが少ないレクチャーになってる感じはしました。

例えば、どのタイミングでCentOSがインストールされたか分かりませんでした。
VagrantFileを生成する「vagrant init bento/centos-6.8」のタイミングなんでしょうね。
ググってみると「vagrant box add centos~~」でインストールするのが通例なようですが、VagrantFile生成と同時に行っているっぽい?このあたりはまた別途ちゃんと調べる必要がありそうです。

また、MyCentOSフォルダ内へ移動して環境構築していきますが、実際に仮想環境としてインストールされていっているファイルがどこに存在するのかなど何も説明されないので結構モヤモヤします。VMについてもう少し概要説明が欲しいと思いました。。

ググって調べれば良いだけの話かも知れませんが、とりあえず私の場合はどこに何のファイルが増えたのか気になったので「DiskInfo3」を使ってファイル容量の占有率が増えているフォルダをチェックしてみて、下記のあたりかなという感じでした。

下記の場所にCentOSのvmdkファイル 280MB が存在しました。
ググると「仮想マシンを構成するファイル」だそうです。
C:\Users\ユーザー名\.vagrant.d\boxes\bento-VAGRANTSLASH-centos-6.8

こちらにも同じくCentOSのvmdkファイル 3.28GB(!)が存在しました。
色々とインストールされたものはこちらに集約されている感じでしょうか。
全て1ファイルになるのですね。。
C:\Users\ユーザー名\VirtualBox VMs\MyCentOS_default_~~~~


それにしてもローカルサーバー環境構築するのも、仮想環境を起動したり終了したり色々とツールをまたいだりして煩雑だし大変ですね。AWS Cloud9 が楽というのがとてもよく分かりました。。

それから注意がひとつあり、ドットインストールでの手順ではWindows7環境で試したらうまくいかず、WIndows10環境で試したらすんなりといきました。

そのあたりもメモしておきたいと思います。

Windows7で試した際に起こったエラーについて


レッスンはwindows10環境で解説されていますが、実は最初にwindows7環境で試しました。

すると私の場合「#05 仮想マシンを立ち上げよう」で途中から進めなくなりました。
PowerShellのバージョンが2だけど最低3以上にしてくれとメッセージが出ていました。

しかしそのためにはまず.NETのバージョンを上げる必要があるようです。

.NET Framework をv4.5以上にバージョンアップする
Windows PowerShell をv3以上にバージョンアップする

こちらの記事を頼りにインストールしました。

Windows Management Framwork は 5.1 がリリースされているようで、先ほどの記事のリンク先からもう1つ飛ばないといけません。つまるところ、こちらからDLすることになるようです。

終了時にPCの再起動を求められるのでご注意。

しかしその後の「vagrant up」のコマンド実行中にタイムアウトしたと表示され失敗します。

ドットインストールの動画下部の補足情報を読むと「ご利用のパソコンにて仮想化支援機能が無効になっていることが原因の可能性があります」ということで、解決策について補足されています。

具体的にはBIOSの設定を変えたりする必要がある様子。

そこで一旦Windows7環境で構築するのをやめました。

vagrant-vbguest」プラグインのインストールを取り消したい場合


レッスン#05で「vagrant-vbguest」プラグインのインストールが説明されつつもテロップで「こちらは行わないでください」と表示されますが、うっかりインストールしてしまいました。

肝心の何故インストールが不要なのかの説明が無いのでモヤっとしますが‥

その場合は‥

vagrant plugin uninstall vagrant-vbguest


こちらのコマンドでアンインストールできるようです。

レッスン途中で中断して再開する場合


Windowsを再起動した場合は、Vagrantの起動からまた行います。
レッスン#05の下記のコマンドをPowerShellでもう一度なぞればOKだと思います。

cd MyVagrant

cd MyCentOS

vagrant up


単純にPowerShellを落としたもののまた再開したい場合などは、まだVagrantが起動中の可能性があるので、ステータスを確認します。

vagrant status


こちらで「The VM is running.~~~」と表示されれば起動しています。
VM は Virtual Machine(仮想マシン)の略のようですね。

ちなみにレクチャー#08の最後に「exec $SHELL -1」を実行すると、レクチャー動画とは違ってそのままPuTTYが終了してしまいました。一応そのまま最後までレクチャーを進めることはできました。。

レッスン#11で「php -S 192.168.33.10:8000」と入力して失敗する


こちらは「-S」が小文字が原因でした。。 

色々なツール


PuTTY

Cyberduck
一昔前で言うところの「FFFTP」のようです。
サーバー上のファイルを編集しようとすると勝手にLocal\TempにDLして開き、保存すれば勝手にサーバー上のファイルを更新してくれているようです。

Atom
動画の途中からAtomを使った解説になるため、インストールしておくと良いかと思います。

以上です。