Route 36

ギジュツ的な事を書くブログ

Windows 10で最低限の開発環境整えるメモ(主に部活用)

はじめに

Windows 10で最低限の開発環境を整えるメモ。主に、苫小牧高専 情報科学・工学系の学生、またはソフトウェアテクノロジー部の部員向け。

わからない事があったら、Twitter: mktakuyaに聞いてもいいし、専攻科の向平に聞いても良い。(だいたい情報棟2Fの奥の研究室にいる)

また、近くのソフトウェアテクノロジー部の部員に聞くという手もあるだろう。

目標

情報工学科の実習室でやっている、以下のような事を自分のPCで出来るようにする。

  • TeraPadWindows)でコードを書く
  • Tera Termでサーバ(UNIXというかLinux)に接続して、各種コマンドの実行やgccによるコンパイル、プログラムの実行をする。

また、部活でRubyを使っている人たちもいるので、その環境も作ってしまう事にする。関係ない人は読み飛ばしてもらって構わない。

必要なもの

  • 電源
  • 高速で安定したネットワーク
  • PCの管理者権限(ソフトのインストールに親のパスワードがいるとNG)
  • 時間(人によるけど1時間30分程度?)

自宅や、学内のeduroamがつながるところでやるとよいでしょう。テザリングでやるとギガが減るのでお勧めしません。

環境

この記事を書くために用意した環境は、以下の通りです。まぁ、Windows 10ならだいたい同じでしょう。

各種ソフトウェアのインストー

TeraPadのインストー

http://forest.watch.impress.co.jp/library/software/terapad/にアクセスして、「窓の杜からダウンロード」ボタンを押してTeraPadをダウンロードしてください。

ダウンロードしたファイルを実行し、TeraPadのインストールを実行します。

TeraTermのインストー

http://forest.watch.impress.co.jp/library/software/utf8teraterm/にアクセスして、Tera Term(ポータブル版ではないほう)を「窓の杜からダウンロード」ボタンを押してダウンロードしてください。

f:id:mktakuyax:20170716233941j:plain

ダウンロードしたファイルを実行し、Tera Termのインストールを実行します。基本的に、「デバイスに変更を加えることを許可しますか?」という黄色い画面に対しては「はい」を、またインストール中のボタンの選択肢はすべて「次へ」で良いです。

Virtual Boxのインストー

https://www.virtualbox.org/wiki/Downloadsにアクセスして、Windows版のVirtual Boxをダウンロードしてください。下の画像のマウスカーソルがあるところです。

f:id:mktakuyax:20170716234246j:plain

ダウンロードしたファイルを実行します。すべてNext、Yes、Install、Finishでいいです。

Vagrantのインストー

https://www.vagrantup.com/downloads.htmlにアクセスして、Windows版のVagrantをダウンロードしてください。

f:id:mktakuyax:20170716234352j:plain

ダウンロードしたファイルを実行します。すべてNext、Install、Finishでいいです。なお、途中でI accept the terms in the License Agreementというチェックボックスが無いとNextと押せない箇所がありますが、よくある「利用規約に同意しますか?」系のメッセージなのでチェックしてNextを押して下さい。

インストール完了後、Finishボタンを押すと再起動するかどうか聞かれるので、起動中のアプリが無いことを確認してYesボタンを押して再起動してください。

PCの再起動が完了したら、各種ソフトウェアのインストールは完了です。

プログラミング環境の構築

はじめに

情報棟実習室でからアクセスできる実習用サーバ(jocalc1, jocalc2, joserv)では、Red Hat Enterprise Linuxと呼ばれるOSが動いています。これは、基本的には商用ユーザがお金を払って使うものです。

今回は、そのRed Hat Enterprise Linuxのクローンで、無償で利用できるCentOSを使います。とはいえ、基本的には実習用サーバと同じです。

これから、コマンドプロンプトやTera Termにコマンドを打っていきますが、この記事は以下のようなルールで書いてあるので覚えておいて下さい。

  • Windowsで、またはコマンドプロンプトで、と書いてある場合はWindows上で操作すること。
  • CentOSで、サーバ側で、またはTera Termで、と書いてある場合はTera Term上で操作すること。
  • コマンドは基本的にコピペで良い。なお、行頭の$>はプロンプトなので、無視して良い。

CentOS 7.2のインストールと初期化

コマンドプロンプトを開いて、以下のコマンドをコピペしてください。

コマンドプロンプトは、キーボードのWin + Rを押して出てきたウィンドウにcmdと入力しEnterを押すと起動します。(Winキーは、Windowsの旗が描いてあるキーです。キーボードの左下あたりにあるはず。)

また、コマンドプロンプトへのコピペは、何かをコピーした状態でコマンドプロンプト上で右クリックするとできます。このコマンドの実行は結構時間がかかるので気長に待ってください。

> vagrant box add CentOS72 https://github.com/CommanderK5/packer-centos-template/releases/download/0.7.2/vagrant-centos-7.2.box

上記コマンドの実行が確認したら、CentOSの初期化を行います。コマンドプロンプトで、以下のコマンドを実行して下さい。

> cd
> mkdir centos
> cd centos
> vagrant init CentOS72

Vagrantfileの編集

エクスプローラを開いて、centosフォルダにあるVagrantfileTeraPadで開きます。開き方がよくわからない人は以下の動画を見て確認してください。

f:id:mktakuyax:20170717161618g:plain

VagrantfileをTeraPadで開いたら、以下のように編集します。行番号は微妙に前後するかもしれませんので、書いてあるテキストを見て適宜判断して下さい。

35行目のコメントアウト(先頭のシャープ記号)を外す

  config.vm.network "private_network", ip: "192.168.33.10"

メモリ割り当ての設定。52行目と57行目、58行目のコメントアウトを外す。最終的に52行目~58行目あたりが以下のようになっていればOK!

  config.vm.provider "virtualbox" do |vb|
  #   # Display the VirtualBox GUI when booting the machine
  #   vb.gui = true
  #
  #   # Customize the amount of memory on the VM:
    vb.memory = "1024"
  end

また、初期設定のままだとサーバから外部のネットワークへうまく接続することができない(正確に言うと、名前解決ができない)ので、69行目のあとに以下のコードを追記してください。
# SHELLと書いてある行と、endとだけ書いてある行の間です。

  config.vm.provider :virtualbox do |vb|
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "on"]
  end

CentOSの起動と接続

コマンドプロンプトで、以下のコマンドを実行します。(もしコマンドプロンプトを閉じてしまっていた場合は、以下のコマンドを実行する前にcd centosコマンドを実行してcentosフォルダに移動してください)

> vagrant up

人によってはネットワーク関連での警告が出ますが、放っておくとコマンドが終了するはずです。これで、サーバが起動しました。

では、起動したサーバにTera Termから接続しましょう。Tera Termを起動し、以下の通りに設定して下さい。

  • 新しい接続の画面
    • ホスト欄を 192.168.33.10 に変更
    • サービス欄が SSHで、TCPポートが22であることを確認
    • OKボタンを押下する
  • SSH認証の画面
    • ユーザ名に vagrant
    • パスワードに vagrant
    • OKボタンを押下する

無事に接続できたら起動は成功です。まだ設定がありますので、一旦Ctrl + Dキーを押してログアウトしてください。

WindowsCentOS間のファイル共有設定

このままでは、Windows側で作成したファイルをサーバ側から操作(コンパイルなど)することができないので、WindowsCentOS間でのファイル共有の設定をします。

まず、Windowsエクスプローラを開いて、先程作成したcentosフォルダがあるフォルダにdevelopというフォルダを作成してください。

developフォルダを作成したら、先ほど開いたVagrantfileをまたTeraPadで開いて、46行目のコメントアウトを外し、以下のように編集して上書き保存してください。

  config.vm.synced_folder "../develop", "/home/vagrant/develop"

これは、Windowsdevelopフォルダを、サーバ側の/home/vagrant/developディレクトリと同期するという意味の設定です。Vagrantfileを上書き保存したら、コマンドプロンプトを開いて、以下のコマンドを実行してください。

> vagrant reload

そのあと、Tera Termを開いてCentOSに接続しましょう。

試しに、共有ディレクトリにsample.txtというファイルを作ってみましょう。Tera Term側で、以下のコマンドを実行してください。

$ cd develop
$ touch sample.txt

Windowsエクスプローラを開いて、developフォルダを確認し、sample.txtまたはsampleというファイルがあれば、フォルダーの共有設定は成功です。

今後、Windowsのdevelopフォルダにファイルやフォルダを作ると、サーバ側からそれらが見えるようになりました。逆に、サーバ側で作ったファイルも、Windows側から見えています。

C言語開発環境のテスト

サーバにgccは最初から入っているので、C言語開発環境はすでにできています。ちゃんとコンパイル等できるか確認してみましょう。

WindowsTeraPadで、以下のコードを書いてください。ファイル名はなんでもいいですがとりあえずhello.cとしておきましょう。書いたコードは、先ほど作成したdevelopディレクトリ内に保存してください。(めんどくさいのでコピペでOK)

#include <stdio.h>

int main(void)
{
        printf("Hello World¥n");
        return 0;
}

Tera Termでサーバにログインし(すでに開いていればそれを開いて)、以下のコマンドを入力してください。シャープ記号で始まる行は説明のためのコメントなので無視してください。

# 共有ディレクトリに移動
$ cd develop
# lsコマンドで hello.c があることを確認
$ ls
# hello.c のコンパイル
$ gcc -o hello hello.c
# プログラムの実行
$ ./hello

正しくコンパイルと実行ができていれば、これでC言語開発環境のテストは完了です。プログラミングの授業の課題等はこの環境でこなすことができます。

プログラミングの授業の環境を作りたいだけの人は、これで作業完了です。次回以降は、この記事の最下部のまとめを見て、サーバの起動や接続をしてください。

Ruby開発環境の構築

はじめに

Rubyの開発環境の構築に移ります。

CentOSのパッケージ管理システムであるyumでインストールしてもいいですが、それだと古いRubyが入ってしまうので、Rubyの公式Webサイトから最新版のRubyをダウンロードして、それをインストールすることにします。

各種パッケージのインストー

まず、Rubyをインストールするのに必要な各種パッケージをCentOSにインストールします。サーバ側で以下のコマンドを実行してください。

$ sudo yum install gcc zlib-devel openssl-devel readline-devel libffi-devel
# Is this ok [y/d/N]: と聞かれたら y と入力してEnter

Rubyのダウンロードと展開

そして、Rubyをダウンロードします。これらの作業は、ホームディレクトリで行います。CentOS上で以下のコマンドを実行してください。

# ホームディレクトリに移動
$ cd 
# Rubyのダウンロード
$ wget https://cache.ruby-lang.org/pub/ruby/2.4/ruby-2.4.1.tar.gz

次に、ダウンロードしたRubyを展開します。

$ tar xvzf ruby-2.4.1.tar.gz

Rubyのインストー

展開したruby-2.4.1ディレクトリに移動し、Rubyのインストールを行います。結構時間がかかります。

$ cd ruby-2.4.1
$ ./configure
$ make
$ sudo make install

Rubyの動作確認

エラー等でなければRubyのインストール成功です。CentOS上で以下のコマンドを実行してRubyが正しくインストールされていることを確認しましょう。  

# ホームディレクトリに戻る
$ cd
# rubyのバージョン確認
$ ruby -v
# irb起動(終了は Ctrl + D)
$ irb

Rubygemsの設定と動作確認

Rubygemsの設定もしてしまいましょう。CentOS上で以下のコマンドを実行してください。

# ユーザ領域にgemをインストールする
$ echo 'gem: --user-install' > .gemrc

# gemコマンドでインストールしたコマンドをshellから見えるようにする
$ echo 'export PATH=$PATH:$HOME/.gem/ruby/2.4.0/bin' >> ~/.bashrc

# シェルの再読み込み
$ exec $SHELL -l

試しに、pryをインストールしてみてみましょう。

$ gem install pry
$ pry

無事にpryが起動すれば成功です。pryは、irbに代わる強力なRubyの対話シェルです。今後、irbの代わりにpryを使うと便利でしょう。

以上で、Rubyの環境構築は完了です。

まとめ

以上で、VirtualboxVagrantを利用したプログラミング環境の構築が終了しました。

今後、PCを再起動等したら、以下の手順でプログラミング環境を立ち上げる事ができます。

  1. コマンドプロンプトを開く
  2. cd centosと入力してEnter
  3. vagrant upと入力してEnter
  4. Tera Termを起動する
  5. ホスト欄が192.168.33.10になっていることを確認しOKボタンを押下
  6. ユーザ名をvagrant、パスワードをvagrantにしてOKボタンを押下
  7. WindowsTeraPadでコードを書いたら、必ずdevelopフォルダ内に保存する。(developフォルダ内に別のフォルダを作るのはOK)
  8. Tera Termでcd developするとTeraPadで書いたコードがあるのでコンパイルなり実行なりできる。

Ubuntuで最低限の開発環境整えるメモ(主に部活用)

はじめに

Ubuntuで最低限の開発環境を整えるメモ。これだけやっておけば、ひとまず授業や部活の演習課題を解くための環境は整うはず。

細かいツールについての説明は置いておいて、コマンドをコピペするだけで開発環境が整うようにしておこう。

環境

僕の環境は、以下のとおりである。まぁUbuntuってところまで同じならいいよ。

基本的に、apt-getコマンドを使用して各種ソフトウェアのインストールを行っていくので、root権限が必要である。(自分が管理しているマシンであれば問題なし)

もしこれから紹介するパッケージがあなたのマシンに既に導入されている場合でも、既にインストールされているパッケージはスキップされるだけなので、ホントにコピペするだけで良い。と思う。先頭の$マークはプロンプトなので、コピペするときは無視して下さい。

基本

build-essential

C/C++の開発ツール一式(gccやMake等)は、build-essentialパッケージをインストールすることで手に入れることができる。

$ sudo apt-get install build-essential

エディタ

VimEmacs等、お好きなのをどうぞ。

もしTeraPad的操作感を望むのなら、geditがいいかもしれない。

$ sudo apt-get install gedit

シェル

シェルとは、OSとユーザ(あなた)の間のインターフェースです。いつもlsとかcdとかそういったコマンドを打っている場所です。

Ubuntuには標準でbashが入っているので、とりあえずはそれを使っておけば良いでしょう。

バージョン管理システム

ソースコードの管理に利用するバージョン管理システムのインストール。いろいろ種類がありますが、今はgitをインストールしておけば良いでしょう。

$ sudo apt-get install git

C言語開発環境

先程build-essentialパッケージを導入した時にgccは入ったので、授業の課題等をこなすならそれでOKかな。

Ruby開発環境

Ubuntuには最初からRubyが入っていますが、この手のOSに最初から入ってる系の言語はちょっとバージョンが古かったり、かといってむやみにバージョンを上げるとシステム全体に影響が出たりもするので、開発用にRubyをインストールしましょう。

rbenvのインストー

複数バージョンのRubyを管理したり、プロジェクト毎にRubyのバージョンを切り替えたりすることのできる、rbenvをインストールします。また、rbenv単体ではRubyのインストール機能はついていないので、その機能を提供するruby-buildプラグインも同時にインストールしておきます。

$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ mkdir -p ~/.rbenv/plugins
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build

シェルの設定ファイルに初期化設定追記

rbenvを使うための設定を、シェルの設定ファイルに書き込む必要があります。

$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
$ exec $SHELL -l

この設定はUbuntu標準シェルのbash用です。他のシェルを設定して使っている人は、それに合わせたファイルに書き込んで下さい。

ruby-buildを動かすために必要なパッケージのインストー

このままRubyのインストールを始めようとすると、rubyをインストールするのに必要なパッケージがマシンに入っていないのでエラーが出るようです。

とりあえず、以下のコマンドをコピペして実行して下さい。

$ sudo apt-get install autoconf bison libssl-dev libyaml-dev libreadline6-dev zlib1g-dev libncurses5-dev libffi-dev libgdbm3 libgdbm-dev

最新版Rubyのインストールとglobal versionのセット

では、2017/07/14時点での最新安定版である2.4.1をインストールしましょう。

$ rbenv install 2.4.1
# Installing ruby-2.4.1... の状態がしばらく続くので気長に待つ。
# Installed ruby-2.4.1 to /home/ユーザ名/.rbenv/versions/2.4.1 と出れば成功

インストールした最新版のRubyを使うように設定しましょう。

$ rbenv global 2.4.1

gemのインストー

試しに、pryをインストールしてみる。

$ gem install pry
$ rbenv rehash

gemをインストールした後は、rbenv rehashを実行するのを忘れないこと。これはrbenvを使っている場合特有の事項であるので、学科内サーバではいらない。

RailsでController毎に違うサイドメニューをレンダリングしたい場合

tl; dr

僕はこんな感じにした。
後述するがnamespace等でviewのディレクトリを分けた場合に対応するためにcontroller.controller_nameではなくcontroller_pathを使っている。

# app/views/layouts/application.html.slim

- if lookup_context.exists?('sidemenu', controller_path, true)
  = render "#{controller_path}/sidemenu"
$ find ./app/views -name '_sidemenu.html.slim' -print
./app/views/posts/_sidemenu.html.slim
./app/views/posts/status/_sidemenu.html.slim
./app/views/items/_sidemenu.html.slim

動機

例えば、全ページに共通して用意されているサイドメニューの内容を、Controllerごとに変えたいとしよう。

PostsControllerの時はapp/views/posts/_sidemenu.html.slimを、ItemsControllerの時は、app/views/items/_sidemenu.html.slimを呼び出したいというような感じ。

application.html.slimにif文の羅列を書いてもいいけど、それだと微妙なので、さてどうしようか。

解説

lookup_context.exits?

ActionViewで提供されている lookup_context. exists? というものを使えば、テンプレートが存在するかどうかを調べることができる。

メソッドのシグネチャはこんな感じである。

exists?(name, prefixes = [], partial = false, keys = [], **options)

詳しくはこちらを参照。 http://api.rubyonrails.org/classes/ActionView/LookupContext/ViewPaths.html#method-i-exists-3F

この場合、nameには'sidemenu'、prefixesにはコントローラ名を、今回欲しいのはpartialだけなのでpartialにはtrueを渡してやればよさそうだ。

controller.controller_name

viewからcontroller名を取得するには、

controller.controller_name

とすれば良いらしい。

よって、application.html.slimに

- if lookup_context.exists?('sidemenu', controller.controller_name, true)
  = render "#{controller.controller_name}/sidemenu"

と書けば良さそうである。

ただこれだと、app/controllers/posts/status_controller.rbで定義されているPosts::StatusControllerが描画したapp/views/posts/status/index.html.slimにおいてcontroller.controller_namestatusとなってしまうため、app/views/posts/status/_sidemenu.html.slimは呼び出されない。

controller_path

そこで、controller_pathを使えば良いという事になった。
参照: Get full rails controller name, including the namespace - Stack Overflow

controller_pathを使えば、Posts::StatusControllerのようなコントローラでもposts/statusというような値を返してくれるため、lookup_contextsはapp/views/posts/status/_sidebar.html.slimというpartialを発見してくれるというわけだ。

以上を踏まえると、application.html.slimはこうなる。

- if lookup_context.exists?('sidemenu', controller_path, true)
  = render "#{controller_path}/sidemenu"

PHPのエラー出力の有無をホスト名によって切り替える

学校の実験でPHPを書いていて、開発環境ではエラー出力をして、本番環境ではエラー出力をしないという事をしたくなったのでメモ。

gethostname()でホスト名を取得し、 preg_match() でlocalが含まれるかどうかを判定して、ini_set()で設定を変更。

if (preg_match('/local/', gethostname())) {
  ini_set('display_errors', 1); // エラー表示をON
} else {
  ini_set('display_errors', 0); // エラー表示をOFF
}

エラーの表示設定の変更自体は、php.iniファイルを編集すれば済む話なので、開発用サーバーと本番サーバーで書き換えればよい話なのだけど、学校の実習用サーバーだとそうもいかないので……。

【苫小牧高専向け】学科内サーバーで最新版のRubyを使う

この記事は、苫小牧高専 ソフトウェアテクノロジー部向けの資料です。
それ以外の人でも普通に使えそうな記事なので、せっかくだし公開しておこうと思います。

はじめに

こんにちは。情報工学科4年 ソフトウェアテクノロジー部のmktakuyaです。
長らく技術系な記事を書いていなかったのでまた書いていきたいと思います。

苫小牧高専 情報工学科の学科内サーバーに入っているRubyのバージョンは1.8.7と古く、またgemやirbといった基本的なコマンドすら入っていないため、Rubyを使ったプログラミングをする上でかなり不便です。
僕達学生ユーザには新しくパッケージをインストールしたりアップデートしたりする権限が与えられていないので、システムのRubyのバージョンを上げることができません。

そこで、自分のホームディレクトリに最新版のRuby(2015/06/18時点で2.2.2)をインストールして使う方法を紹介します。

(学内向け)
Rubyのバージョンやユーザ名などは各自で適宜読み替えてください。
基本的には、 /home/student/入学年度/学籍番号 が自分のホームディレクトリなはずです。
わからないことがあれば助けに行くので、J4向平まで連絡ください。

環境

僕が試した環境: 苫小牧高専 情報工学科 学科内LANにあるjocalc1及びjocalc2

まぁ、普通にUbuntuとかCentOSとか、LinuxならOKだと思う。

手順

Ruby本体をダウンロードする

まず、https://www.ruby-lang.org/ja/downloads/からRuby本体をダウンロードします。

リンク先の "ソースコードからRubyをダウンロードする" から、最新の安定版をダウンロードして、自分のホームディレクトリに保存してください。

(学内向け) ホームディレクトリは、エクスプローラーのネットワークドライブからjocalc1を開いてすぐのところです。

もし、学科内LANから外部に出られない場合は、http://www/~mt12340/files/softechに置いておくのでそこからダウンロードしてください。

Rubyをインストールする

次に、Rubyをインストールします。
TeraTermでjocalc1に接続して、以下のコマンドを実行してください。

$ cd ~/
$ mkdir -p ~/local
$ tar zxvf ruby-2.2.2.tar.gz
$ cd ruby-2.2.2
$ ./configure -prefix=$HOME/local
$ make
$ make install

make や make install にかなり時間がかかりますが、根気よく待ちましょう。

インストールが成功したことを確認する

make installが終わったら、正常にインストールできているかどうか確認します。

$ /home/student/j12/mt12340/local/bin/ruby -v

を実行して、Rubyのバージョンが出力されればインストール成功です。

PATHの設定をする

現状だと、最新版のRubyを使うためには絶対パスでいちいち

$ /home/student/j12/mt12340/local/bin/ruby file_name.rb

としなければなりません。

めんどうなので、PATHの設定をします。

$ echo "export PATH=$HOME/local/bin:$PATH" >> ~/.bashrc

これで $HOME/local/bin にPATHが通るので、次回からは

ruby file_name.rb

で最新版のRubyが使えるようになります。

irbやgemなどのコマンドも使えるようになっているはずです。

おわりに

以上が、学科内サーバーで最新版のRubyを使う方法です。
最新版のRubyで快適な放課後コーディングタイムを送りましょう。

gemを入れたりする方法はまたの機会に書きます。