一からはじめるRoRoBoW（前編）

# はじめに
* 本記事は、Windows10 Pro 64ビットOSにてRoR環境を構築するにあたって、Ruby自体はほとんど囓ったことがない人向け、かつ、分かりやすく紐解くための内容です
* 小生、Rubyについては様々な経緯で漠然と毛嫌いをしていたので、JavaやPHPについては経験があるが、Rubyについては一切経験がない程度
* Bash on Windows環境自体は一切経験がない程度
* 精々、redmine環境構築でrbenvやgem、Phusion Passengerを触った程度

# 環境構築
## システム要件
* Intel Core i5 x86_64アーキテクチャ
    * [アーキテクチャの違い][Link-Ascii-CPUArch]
* Windows10 pro 64ビットOS
    * [スタート] - [Windows PowerShellをクリック]
    * [System.Environment]::OSVersion
        * [PowerShell で Windows OS Versionを取得する][Link-Qiita-PowerShell-WinOSVersion]
        * [Windows PowerShell入門について][Link-Microsoft-PowerShell]

| Platform | ServicePack | Version | VersionString |
|:---------|:------------|:--------|:--------------|
| Win32NT  |             | 10.0.15063 | Microsoft Windows NT 10.0.15063.0 |


## 手順
1. BOWをセットアップ
    * [Windows Subsystem for Linuxをインストールしてみよう！][Link-Qiita-WindowsSubsystemForLinux]
    * [Bash on Ubuntu on Windows環境構築メモ][Link-Qiita-BOW]
        1. [スタート] - [歯車アイコンクリック] - [アプリ] - [アプリと機能]
        1. [関連設定] - [プログラムと機能クリック]
        1. [Windowsの機能の有効化または無効化] - [Windows Subsystem for Linux (Beta)] - [チェック有効化] 
        1. [スタート] - [歯車アイコンクリック] - [更新とセキュリティ] - [開発者向け]
        1. [開発者向け機能を使う] - [開発者モード] - [ボタン有効化]
        1. [スタート] - [Windowsシステムツール] - [コマンドプロンプト]（「ここに入力して検索」からcmdでも良い）
        1. lxrun /uninstall
        1. [スタート] - [Microsoft Store] - [検索窓] - [Ubuntuを入力]
        1. ダウンロードする
        1. インストールする
        1. [スタート] - [Bash on Ubuntu on Windowsをクリック]
        1. lsb_release -a
        1. cat /etc/os-release
    * [Bash on Ubuntu on Windows の初期設定][Link-Blog-bow]
1. リポジトリの更新
    * [Ubuntu14.04 に rbenv をインストールして Ruby のバージョン管理][Link-Qiita-RBENV]
    * apt-get update
        * [aptまとめ][Link-Qiita-apt]
        * [aptまとめ（他）][Link-linuxfun-apt]
        * [aptまとめ（他）][Link-Qiita-apt-other]
        * [aptリポジトリ操作まとめ][Link-Qiita-aptrepo]
    * root権限が必要
        * sudo apt-get update
    * root権限・かつroot環境変数が必要
        * sudo -E apt-get update
        * [sudo] password for hoge: 
    * Ign: ** http://archive.ubuntu.com/ubuntu xenial InRelease
    * Ign: ** http://security.ubuntu.com/ubuntu xenial-security InRelease
    * 上記の場合、rbenvのインストール
1. インストール済みのソフトウェア(rpmパッケージ)の更新
    * [Ubuntu14.04 に rbenv をインストールして Ruby のバージョン管理][Link-Qiita-RBENV]
    * aptとは
        * [apt - Wikipedia][Link-Wikipedia-apt]
        * [yum と apt-get の対応表][Link-Hateblo-apt-yum]
            * [yum使い方まとめ][Link-Blog-engentrance-yum]
    * apt-get upgrade
    * root権限が必要
        * sudo apt-get upgrade
    * root権限・かつroot環境変数が必要
        * sudo -E apt-get upgrade
        * [sudo] password for hoge: 
1. rbenvインストール
    * [Ubuntu14.04 に rbenv をインストールして Ruby のバージョン管理][Link-Qiita-RBENV]
    * apt-get install git build-essential libssl-dev
        * [build-essentialの依存パッケージ][Link-Debian-build-essential]
    * root権限が必要
        * sudo apt-get
    * root権限・かつroot環境変数が必要
        * sudo -E apt-get install git build-essential libssl-dev
    * mkdir -m 777 -p /mnt/c/var/www/repos/
    * cd /mnt/c/var/www/repos/
    * git clone https://github.com/sstephenson/rbenv.git .rbenv
        * fatal: unable to access 'git-url' : server certificate verification failed. CAfile: 'cat file path'
            * [git で https なリモートレポジトリを登録](https://qiita.com/sekizo/items/2d809ac776e6512531fc)
            * 今回は証明書がなければ死ぬわけではないので無視（通信経路の暗号化が出来ないことが不安ではある。偽装についてはEV-SSL使っていないサービスであれば、その時点でほとんど意味がない）
    * echo 'export PATH="%rbenv_home%/bin:${PATH}"' >> ~/.profile
    * echo 'eval "$(rbenv init --no-rehash -)"' >> ~/.profile
        * [--no-rehash を付けたほうがログインの度rehashせず早いとのこと][Link-Qiita-rbenv-no-rehash]
    * source ~/.profile
1. ruby-buildインストール
    * git clone https://github.com/sstephenson/ruby-build.git .rbenv/plugins/ruby-build
    * cd .rbenv/plugins/ruby-build
    * ./install.sh
    * mkdir: cannot create directory '/usr/local/share/ruby-build' : Permission denied
    * chmod 777 /usr/local/share
    * chmod: changing permissions of '/usr/local/share' : Operation not permitted
        * BoW上ではsu権限のないユーザーでrootユーザー所有のディレクトリの権限を開放することは出来ないらしい？
    * sudo ./install.sh
    * root権限が必要
        * sudo ./install.sh
    * root権限・かつroot環境変数が必要
        * sudo -E ./install.sh
    * [sudo] password for hoge: 

1. Rubyインストール
    * [Ubuntu14.04 に rbenv をインストールして Ruby のバージョン管理][Link-Qiita-RBENV]
    * rbenv install --list
    * インストール可能なruby/jruby/maglev/mruby/rbx/reeの一覧
    * rbenv install 1.9.3-p547
    * Downloading yaml-0.1.6.tar.gz...
    * -> https://dqw8nmjcqpjn7.cloudfront.net/7da6971b4bd08a986dd2a61353bc422362bd0edcc67d7ebaac68c95f74182749
    * Installing yams-0.1.6...
    * Installed yams-0.1.6 to /home/hoge/.rbenv/versions/1.9.3-p547
    * Downloading ruby-1.9.3-p547.tar.bz2...
    * -> https://cache.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p547.tar.bz2
    * Installing ruby-1.9.3-p547
    * WARNING: ruby-1.9.3-p547 is past its end of life and is now unsupported.
    * It no longer receives bug fixes or critical security updates.
        * 既にEOLで、現在サポートされていません。バグフィックスや致命的な脆弱性の更新もありませんと言う事ですので、理解して使ってください。
    * Installed ruby-1.9.3-p547 to /home/hoge/.rbenv/versions/1.9.3-p547
    * rbenv rehash
    * rbenv global 1.9.3-p547
        * マシン全体で使うデフォルトのRubyのバージョンを変更する
    * ruby -v
    * ruby 1.9.3p547 (2014-05-14 revision 45962) [x86_64-linux]

1. Railsインストール
    * cd %rails対象アプリケーションHOME_DIR%
    * gem install rails --version="3.2.11"
    * ・・・（若干時間がかかる模様）・・・
    * Fetching / Successfully / Installing
    * rbenv rehash

1. sqlite3インストール（環境依存）
    * [Ruby on Rails 4.2をUbuntuにインストールする手順をかなり丁寧に説明してみました][Link-Oiax-rails-install-on-ubuntu]
    * apt-cache search sqlite3 | grep ^sqlite3
    * apt-cache search sqlite3 | grep ^libsqlite
    * root権限が必要
        * sudo apt-cache search sqlite3 | grep ^sqlite3
        * [sudo] password for hoge: 
    * root権限・かつroot環境変数が必要
        * sudo -E apt-cache search sqlite3 | grep ^sqlite3
    * apt-get install -y sqlite3
    * root権限が必要
        * sudo -E apt-get install sqlite3 libsqlite3-dev nodejs
        * [sudo] password for hoge: 
    * gem install sqlite3 -v 1.3.7
    * rbenv rehash

1. libpq-devインストール（環境依存）
    * apt-get install -y libpq-dev
    * root権限が必要
        * sudo apt-get -y install libpq-dev
    * root権限・かつroot環境変数が必要
        * sudo -E apt-get -y install libpq-dev
    * gem install pg -v 0.13.2
    * rbenv rehash

1. sass-rails（環境依存）
    * gem install sass-rails -v 3.2.3
    * rbenv rehash

1. yumインストール
    * apt-get install yum
    * root権限が必要
        * sudo apt-get install -y yum
    * root権限・かつroot環境変数が必要
        * sudo -E apt-get install -y yum
    * 特に必要ではないのでスキップして良い

1. autoconfインストール
    * apt-get install autoconf
    * root権限が必要
        * sudo apt-get install autoconf
    * root権限・かつroot環境変数が必要
        * sudo -E apt-get install autoconf

1. bundleインストール
    * gem install bundler -v 1.16.0
    * rbenv rehash
        * [Bundlerのインストール時に、初めてgemをインストールするときに詰まったこと。][Link-Qiita-rbenv-rehash]

1. 依存関係のインストール
    * cd %rails対象アプリケーションHOME_DIR%
    * ※開発環境指定したい場合bundle --path=vendor/bundle --without=production staging
    * bundle install
    * ====================================================
    * A lot has changed recently in Prawn.
    * Please read the changelog for details:
    * https://github.com/prawnpdf/prawn/wiki/CHANGELOG
    * ====================================================

1. DB作成（環境依存）
    * bundle exec rake db:create
    * bundle exec rake db:migrate
    * ※サンプルデータ投入bundle exec rake db:seed
1. Railsサーバー起動
    * rails s app-name（又はbundle exec rails s）
        * [railsコマンドまとめ][Link-railsguides-cui]

        | コマンド | 意味 | 省略形 |
        |:--------|:-----|:------|
        | rails console | コマンドラインでRailsアプリケーションとやり取りすることができる                       | rails c production |
        | rails server | WEBrickという小規模のwebサーバーが起動(WEBrickはRubyに標準添付されている | rails s -e production -p 4000 |
        | rake | rake --tasks 実行可能なRakeタスクの一覧が表示 / rake about Ruby、RubyGems、Rails、Railsのサブコンポーネント (訳注: Active RecordやAction Packなど) のバージョン、Railsアプリケーションのフォルダー名、現在のRailsの環境名とデータベースアダプター、そして、スキーマのバージョンが表示される / rake assets:precompile app/assets配下のファイルをプレコンパイルすることができる / rake assets:clean 古くなったコンパイル済みのファイルを削除できる（新しいassetsのビルドをしながらも古いassetsへのリンクを残す「ローリングデプロイ (rolling deploy)」というやり方を実現） / rake assets:clobber public/assets配下を完全に消去 | - |
        | rake db:migrate | RailsはSQLite3に新しいデータベースを作る | - |
        | rake db:create | RailsはSQLite3に新しいデータベースを作る | - |
        | rake db:seed | テストデータを投入する | - |
        | rake db:up | マイグレーションを進める？ | - |
        | rake db:down | マイグレーションを戻す | - |
        | rake db:redo | マイグレーションをロールバックする？ | - |
        | rake db:reset | マイグレーションを０に戻す？ | - |
        | rails generate | テンプレートを使用して様々なものを作成(コントローラジェネレータ、データモデルジェネレータ等) | rails g controller |
        | rails destroy | ジェネレータコマンドが何をしたか把握し、それを取り消す | rails d model Oops |
        | rails dbconsole | 使用しているデータベースを探し出し、適切なデータベースコマンドラインツールを起動。MySQL、PostgreSQL、SQLite、そしてSQLite3をサポート | rails db |
        | rails db:migrate | ジェネレータで作成したデータモデルのマイグレーションを走らせる | - |
        | rails runner | 非対話的にRailsの文脈でRubyのコードを実行することができる | rails r |
        | rails new app_name | 新しいRailsアプリケーションを作成 | - |

1. Railsサーバー停止
    * [Ctrl+Cシグナル][Link-Teratail-Rails-stop-signal]

1. 失敗談
    * ※リポジトリの更新時※リポジトリからのダウンロード時にNetwork is unreachable
        * apt-get update
        * Cannot initiate the connection to archive.ubuntu.com:80 (2001:67c:1360:8001::17). - connect (101: Network is unreachable) IP: 2001:67c:1360:8001::17 80
    * 解決策
        * Proxyで外部接続している環境においては、https_proxy変数と、http_proxy変数をセットする。（sudo使用時には-Eで環境変数を引き継ぐオプションをつけ忘れないこと）
        * vi ~/.profile
        * export https_proxy="%proxy_server_URL:IncludeProtocol_o_ssl%"
        * export http_proxy="%proxy_server_URL:IncludeProtocol%"
        * source ~/.profile
        * sudo -E apt-get update
    * libpq-dev未インストールにおけるbundle install
        * [libpq-dev未インストールにおけるbundle install][Link-Qiita-gem-install-libpq-dev-error2]

        * Fetching gem metadata from http://rubygems.org/...........
        * Fetching gem metadata from http://rubygems.org/.
        * Resolving dependencies
        * RubyGems...
        * Using / Fetching / Installing
        * Installing pg 0.13.2 with native extensions
        * Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.
        * /home/hoge/.rbenv/versions/1.9.3-p547/bin/ruby extconf.rb
        * checking for pg_config... no
        * No pg_config... trying anyway. If building fails, please try again with
        * --with-pg-config=/path/to/pg_config
        * checking for libpq-fe.h... no
        * Can't find the 'libpq-fe.h header
        * *** extconf.rb failed ***
        * Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more details.  You may need configuration options.
        * Gem files will remain installed in /home/hoge/.rbenv/versions/1.9.3-p547/lib/ruby/gems/1.9.1/gems/pg-0.13.2 for inspection.
        * Results logged to /home/hoge/.rbenv/versions/1.9.3-p547/lib/ruby/gems/1.9.1/gems/pg-0.13.2/ext/gem_make.out
        * An error occurred while installing pg (0.13.2), and Bundler cannot continue.
        * Make sure that `gem install pg -v '0.13.2'` succeeds before bundling.
        * In Gemfile:
        * pg
    * 解決策
        * [libpq-devパッケージのインストール][Link-Qiita-gem-install-libpq-dev-error]
    * railsサーバーを実行する際にパッケージがみつからない
        * rails s
        * Could not find gem 'sass-rails (~> 3.2.3)' in any of the gem sources listed in your Gemfile.
        * Run `bundle install` to install missing gems.
    * 解決策
        * [パッケージのインストールを行う][Link-Blog-missing-gem-package]
        * gem install sass-rails -v 3.2.3
    * [archive.ubuntu.comに接続できない][Link-Github-archive-ubuntu-com-unreachable]
        * sudo apt-get install libpq-dev
        * Cannot initiate the connection to archive.ubuntu.com:80 
        * (2001:67c:1360:8001::17). - connect (101: Network is unreachable) [IP: 2001:67c:1360:8001::17 80]
    * 解決策
        * sudo vi /etc/resolvconf/resolv.conf.d/base
        * nameserver 8.8.8.8
        * nameserver 8.8.4.4
    * gitアクセス時に「error: server certificate verification failed. CAfile: /etc/ssl/certs/ca-certificates.crt CRLfile: none while accessing https://xxxx@xxxx.xxxx/xxxx/xxxx.git/info/refs」
    * 解決策
        * export GIT_SSL_NO_VERIFY=1
    * rails console実行時に「`require': cannot load such file --readhline」
        * apt-get install readline-devel
        * vi Gemfile
        * gem 'rb-readline'
        * bundle install

            * [rails consoleで`require': cannot load such file --readhlineになる件][Link-Blog-rails-console-require-no-such-file]
            * [rails consoleコマンドがLoadErrorでエラーになったときの解消法
][Link-Blog-rails-console-require-no-such-file2]
    * bundler installでCould not load OpenSSLが発生する
        * apt-get install zlib1g-dev libssl-devを実行する
        * bundler install
        * それでも失敗する場合
        * rbenv uninstall %ruby version%
        * RUBY_CONFIGURE_OPTS="--with-openssl-dir=/usr/bin" rbenv install 1.9.3-p125
        * --with-openssl-dirには`which openssl`を代入する
        * bundle install
    * web / web-apサーバーを起動した際にWindows上からアクセスするには
        * ifconfig
        * [Bash on Ubuntu on Windowsを利用してWindows上のRubymineで開発するための環境構築方法][Link-Memo-BoW-Ip]

#### [後編へ続く]()

[Link-Ascii-CPUArch]: http://ascii.jp/elem/000/000/168/168604/
[Link-Blog-missing-gem-package]:http://startonlineeikaiwa.com/programming/2017/01/18/rails-server%E5%AE%9F%E8%A1%8C%E2%86%92%E3%80%8Crun-bundle-install-to-install-missing-gems-%E3%80%8D%E2%86%92bundle-update%E3%81%A7%E8%A7%A3%E6%B1%BA/
[Link-Blog-rails-console-require-no-such-file]:https://makotton.com/2014/07/10/305
[Link-Blog-rails-console-require-no-such-file2]:https://qiita.com/roki1801/items/7e4a371ae0b9ba928f55
[Link-Blog-engentrance-yum]:https://eng-entrance.com/linux-package-yum
[Link-Blog-bow]:http://kick.ti-da.net/e8960877.html
[Link-Debian-build-essential]:https://packages.debian.org/ja/wheezy/build-essential
[Link-Github-archive-ubuntu-com-unreachable]:https://github.com/moby/moby/issues/20394
[Link-Microsoft-PowerShell]:https://technet.microsoft.com/ja-jp/scriptcenter/powershell_owner01.aspx

[Link-Hateblo-apt-yum]:http://d.hatena.ne.jp/yutamoty/20091021/1256107870
[Link-Hateblo-reserve-ruby]:http://d.hatena.ne.jp/a-yamada/20090524/1243177017
[Link-Hateblo-ruby-etc]:http://bakunyo.hatenablog.com/entry/2013/07/11/Ruby認定技術者のSilverに受かったので諸々の報告

[Link-linuxfun-apt]:https://linuxfan.info/package-management-ubuntu
[Link-Maglev]:http://maglev.github.io/

[Link-Oiax-rails-install-on-ubuntu]:https://www.oiax.jp/rails/zakkan/rails_4_2_installation_on_ubunt.html
[Link-Oiax-rails-install-on-ubuntu2]:https://qiita.com/mopinfish/items/e63106afafb228f11799
[Link-Oiax-ruby-standard-module]:https://ref.xaio.jp/ruby/classes

[Link-Qiita-apt-command]:https://qiita.com/white_aspara25/items/723ae4ebf0bfefe2115c
[Link-Qiita-gem-install-libpq-dev-error]:https://qiita.com/youcune/items/5b783f7fde45d0fd4b35
[Link-Qiita-gem-install-libpq-dev-error2]:https://qiita.com/tarosay/items/b97e3f40d6b8acfa1bb7
[Link-Qiita-WindowsSubsystemForLinux]:https://qiita.com/Aruneko/items/c79810b0b015bebf30bb
[Link-Qiita-apt]:https://qiita.com/white_aspara25/items/723ae4ebf0bfefe2115c
[Link-Qiita-apt-other]:https://qiita.com/SUZUKI_Masaya/items/1fd9489e631c78e5b007
[Link-Qiita-aptrepo]:https://qiita.com/kon_yu/items/8ac350f3951f8534c931
[Link-Qiita-BOW]:https://qiita.com/pepo/items/52a19ce5994ebaff9add
[Link-Qiita-BOW2]:https://qiita.com/chimame/items/8130aa2c07a152a865b1
[Link-Qiita-bash]:https://qiita.com/oniipon/items/7890bc42191dc8ff730b
[Link-Qiita-RBENV]:https://qiita.com/kazoo04/items/289c4f6a8501df3a7359
[Link-Qiita-rbenv-no-rehash]:https://qiita.com/mopinfish/items/e63106afafb228f11799
[Link-Qiita-rbenv-rehash]:https://qiita.com/tokimari/items/51ac63a1fe244b819aea
[Link-Qiita-PowerShell-WinOSVersion]:http://tech.guitarrapc.com/entry/2013/10/25/075920
[Link-Qiita-use-gem]:https://qiita.com/muran001/items/14f34b735e0a6b4af98c
[Link-Qiita-use-gem2]:https://qiita.com/pugiemonn/items/0c73e99d39d36f6ed56c
[Link-Qiita-ruby-calc1]:https://qiita.com/tbpgr/items/75aafbcb8f2b989bcaad

[Link-Rails-doc]:http://railsdoc.com/rails
[Link-railsguides-cui]:https://railsguides.jp/command_line.html#rails-console

[Link-Teratail-Rails-stop-signal]:https://teratail.com/questions/1087
[ローカルに立てた Git リポジトリに https でアクセスしようと思って怒られた場合 - scheakur@tumblr]:http://blog.scheakur.com/post/50806486798/%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E3%81%AB%E7%AB%8B%E3%81%A6%E3%81%9F-git-%E3%83%AA%E3%83%9D%E3%82%B8%E3%83%88%E3%83%AA%E3%81%AB-https-%E3%81%A7%E3%82%A2%E3%82%AF%E3%82%BB%E3%82%B9%E3%81%97%E3%82%88%E3%81%86%E3%81%A8%E6%80%9D%E3%81%A3%E3%81%A6%E6%80%92%E3%82%89%E3%82%8C%E3%81%9F%E5%A0%B4%E5%90%88

[Link-Wikipedia-apt]:https://ja.wikipedia.org/wiki/APT

[Link-Memo-hash]:http://d.hatena.ne.jp/keyword/%CF%A2%C1%DB%C7%DB%CE%F3
[Link-Memo-Ruby-exp]:https://docs.ruby-lang.org/ja/latest/doc/spec=2foperator.html#multiassign
[Link-Memo-Sublime]:https://techacademy.jp/magazine/3060
[Link-Memo-Mixin]:https://ja.wikipedia.org/wiki/Mixin
[Link-Memo-Ruby]:https://ja.wikipedia.org/wiki/Ruby
[Link-Memo-JavaToRuby]:https://www.ruby-lang.org/ja/documentation/ruby-from-other-languages/to-ruby-from-java/
[Link-Memo-Ruby-exp-2]:https://qiita.com/Fendo181/items/eb2cb17f32d99aa01f59#破壊的メソッド真偽値を返すメソッド
[Link-Memo-Ruby-exp-3]:https://qiita.com/oshou/items/b7873c67cf22b5e8b42f
[Link-Memo-BoW-Ip]:https://qiita.com/ftakao2007/items/b1b8a24d02096f800f24

[Link-blog-ubuntu-version]:http://kaworu.jpn.org/ubuntu/Ubuntu%E3%81%AE%E3%83%90%E3%83%BC%E3%82%B8%E3%83%A7%E3%83%B3%E3%81%AE%E8%AA%BF%E3%81%B9%E6%96%B9

[]:
[]: