CoreCLRのインストールとビルド、実行まで
最近必要に駆られてCoreCLRを触っております。
CoreCLRとはMicrosoft社が開発しているオープンソースで、
LinuxOS上で.NET Coreを動かすことができるフレームワークです。
簡単に説明すると、C#で書いたプログラムがそのままLinuxOS上で実行できるという代物です。
LinuxOS上ということなので、Linuxベースで作られているMacOSでももちろん実行することができます。
なんとCoreCLRはdockerにも対応しているので、インストールするのが面倒でかつ
dockerに慣れている方はdocker版を導入してみると良いかもしれません
docker run -it microsoft/dotnet:latest
今回はUbuntuでのインストール手順を説明したいと思います。
インストール
インストールはCoreCLRの公式サイトに分かりやすく手順が書いてありますので、
そちらを参照して頂いても大丈夫ですが、こちらにも記載したいと思います。
.NET - Powerful Open Source Development
Ubuntu 14.04 の場合
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ trusty main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 sudo apt-get update
Ubuntu 16.04 の場合
sudo sh -c 'echo "deb [arch=amd64] https://apt-mo.trafficmanager.net/repos/dotnet/ xenial main" > /etc/apt/sources.list.d/dotnetdev.list' sudo apt-key adv --keyserver apt-mo.trafficmanager.net --recv-keys 417A0893 sudo apt-get update
上記コマンドを実行してapt-getリストをアップデートしたら、実際にCoreCLRをインストールします。
sudo apt-get install dotnet-dev-1.0.0-preview2-003121
これでCoreCLRのインストールが完了しました!
とても簡単ですね。
ビルド準備
CoreCLRでビルドするには、まず下記のようにプロジェクトの初期化を行います。
$> mkdir sample $> cd sample $> dotnet new Created new C# project in /root/sample. $> dotnet restore log : Restoring packages for /root/sample/project.json... log : Writing lock file to disk. Path: /root/sample/project.lock.json log : /root/sample/project.json log : Restore completed in 1335ms. $> dotnet run Project sample (.NETCoreApp,Version=v1.0) will be compiled because expected outputs are missing Compiling sample for .NETCoreApp,Version=v1.0 Compilation succeeded. 0 Warning(s) 0 Error(s) Time elapsed 00:00:01.9024996 Hello World!
ひとつずつ説明していきます。
まずは、mkdirでプロジェクトが格納されるフォルダを作成し、cdでその中に入ります。
ここは特に問題ないと思います。
次に dotnet new コマンド。
このコマンドを実行することにより、デフォルトのProgram.csファイルとproject.jsonファイルが作成されます。
Program.csとproject.jsonファイルの中身は下記のようになっています。
// Program.cs using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); } } } // project.json { "version": "1.0.0-*", "buildOptions": { "debugType": "portable", "emitEntryPoint": true }, "dependencies": {}, "frameworks": { "netcoreapp1.0": { "dependencies": { "Microsoft.NETCore.App": { "type": "platform", "version": "1.0.0" } }, "imports": "dnxcore50" } } }
Program.csはコンソールに「Hello World!」と出力するだけのシンプルなものになっています。
project.jsonはなにやらいろいろと設定されていますが、CoreCLRを動かすのに最低限必要なもののようです。
必要なフレームワークなどがある場合はこのファイルを編集して対応することができそうです。
次に dotnet restore コマンド。
このコマンドを実行するとproject.jsonファイルの設定に基づいて必要なファイルなどをダウンロードしてきます。
それと同時にproject.lock.jsonという中身の多い設定ファイルが作成されます。
最後に dotnet run コマンド。
このコマンドは読んで字の如くプログラムを実行してくれます。
ソースコード変更後の初回実行時に限りビルドも同時に行ってくれます。
ビルドのみを行いたい場合は下記コマンドにて行うことが可能です。
dotnet build
実行結果を見るとたしかに最下部のほうに「Hello World!」と表示されていますね!
最後に
今回はインストール手順とビルド、実行までの説明でした。
今後CoreCLRを使ってプロジェクトを進めていくにあたりいろいろと壁にぶつかることもあると思いますが、
これからCoreCLRを触る機会のある方たちに有用な情報として残していけたらなと思っています。
CoreCLRは2016年6月に1.0版がリリースされたので、今後ますます開発が進められて実用レベルに達する日も
遠くはないんじゃないかなぁと、期待も込めて思っています!
それでは。
Laravel5をLinuxで使う時にハマるポイント
LinuxサーバでLaravel5を利用する時にだいたいの人がつまずくであろうポイントをまとめてみた。
ハマるポイント1
これを忘れてvendorフォルダが作成されておらず動かない。
composer install
ちなみに composer もインストールしなければならないので下記コマンドでインストールする。
インストールすると composer.phar というファイルになるので mv するなりして composer にするとよい。
curl -s http://getcomposer.org/installer | php
さらに、PHPもインストールされていない場合は下記コマンドでインストール。
sudo apt-get install php5-cli
ハマるポイント2
bootstrap、storageフォルダに対して777権限を付与していなくてエラーになる。
とにかくフォルダもファイルも777にしておけば動く。(セキュリティ面は自己責任で!)
chmod 777 -R bootstrap chmod 777 -R storage
ハマるポイント3
.envファイルを作成していなくてエラーになる。
作成した後は中身も適切に変更すること。
cp -p .env_example .env
php artisan key:generate
ハマるポイント4
ページに「Whoops, looks like something went wrong.」が表示されて困る。
config/app.php のDEBUGモードをオンにすれば通常のスタックトレースが表示されるようになる。
vi config/app.php
まとめ
ほとんどのことはLaravel5のドキュメントを読めば解決するのでドキュメントはしっかり読みましょう。
(Laravelのドキュメントは英語しかなかった気がしますが、頑張れば読めるレベルだと思います。)
docker-compose のインストール
Dockerを使っていると複数のコンテナを管理するのが大変になってきます。
そんな時に力を発揮するのが「docker-compose」です。
Docker では Dockerfile にてコンテナの内容を管理していましたが、
docker-compose では docker-compose.yml ファイルでコンテナを管理できます。
まずはインストールの仕方から。
前提条件
・Macでの手順
・MacのVirtualBoxにUbuntuがインストール済み
・Dockerもインストール済み
インストール手順
インストール手順は至って簡単で、curl 経由でスムーズにインストールすることが可能です。
/usr/local/bin フォルダに書き込み権限が必要なので、もし root ユーザ意外で権限が付いていない場合は事前に付与しましょう。
sudo chmod 777 /usr/local/bin
docker-compose のインストールをします。
1.7.0 の部分はバージョン情報なので、本家サイトで最新を確認して変更してください。
■公式サイト
docs.docker.com
sudo -i curl -L https://github.com/docker/compose/releases/download/1.7.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
インストールが終わると /usr/local/bin に docker-compose ファイルが作成された状態になります。
今度はこの実行ファイルに実行権限を付与してあげます。
sudo chmod +x /usr/local/bin/docker-compose
正常にインストールされたか確認します。
こんな感じにバージョン情報が表示されればインストール成功です。
docker-compose version docker-compose version 1.6.2, build 4d72027 docker-py version: 1.7.2 CPython version: 2.7.9 OpenSSL version: OpenSSL 1.0.1e 11 Feb 2013
今回は簡単ですがインストール手順のみになります。
Docker + Laravel + MariaDB + Redis での環境構築
Scalaの開発環境の次に、手堅くPHPの開発環境も作ることになりました。
その手順とハマったポイントなどを備忘録として書いていきたいと思います。
前提条件
・Macでの手順
・MacのVirtualBoxにUbuntuがインストール済み
・Dockerもインストール済み
・docker-composeもインストール済み
参考)VirtualBox、Ubuntuのインストールや、Dockerのインストール手順はこちらを参照
kabatin.hateblo.jp
参考)docker-composeのインストール手順はこちらを参照
kabatin.hateblo.jp
各ソフトウェアのバージョン情報など
・MacOSX 10.11.1
・VirtualBox 5.0.14
・Ubuntu 14.04 LTS
・Docker 1.10.2
・PHP 5.5.9
・Laravel 5.2
・MariaDB 10.1.12
・Redis 3.0.5
フォルダ構成
まず完成形のフォルダ構成はこちら
. ├── data │ └── php ├── docker-compose.yml ├── server │ └── docker │ ├── mariadb │ │ ├── Dockerfile │ │ └── docker-entrypoint-initdb.d │ │ └── configure.sh │ ├── nginx │ │ ├── Dockerfile │ │ └── conf │ │ └── default.conf │ ├── php │ │ └── Dockerfile │ └── redis │ └── redis.conf └── storage-compose.yml
MariaDB と Redis
まずは比較的簡単なデータベースとRedisの設定から行います。
設定するファイルはメインの docker-compose.yml とは分けて、storage-compose.yml とします。
中身はこんな感じになっています。
version: '2' services: db: build: server/docker/mariadb volumes: - ./data/mariadb:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_PASSWORD: password MYSQL_USER: user1 MYSQL_DB: password entrypoint: /docker-entrypoint-initdb.d/configure.sh redis: image: redis:3.0.5 volumes: - "./server/docker/redis/redis.conf:/usr/local/etc/redis/redis.conf" entrypoint: - "redis-server" - "/usr/local/etc/redis/redis.conf"
MariaDB, Redis 共通
build
Dockerfile が置いてあるパスを指定します。
最初にお見せしたツリーを見ると MariaDB 用の Dockerfile の場所が指定されていることがわかります。
environment
コンテナ内の環境変数を設定しています。
entrypoint
コンテナ起動時に実行するコマンドを指定します。
今回は /docker-entrypoint-initdb.d/configure.sh を指定していますが、これは Dockerfile 内で、
事前に用意したファイルをコンテナ内部へコピーしたものを指定しています。
Redis
build
Dockerfile が置いてあるパスを指定します。
最初にお見せしたツリーを見ると Redis 用の Dockerfile の場所が指定されていることがわかります。
volumes
事前に設定してある redis.conf ファイルをコンテナ内の対象ファイルにマウントしています。
entrypoint
コンテナ起動時に実行するコマンドを指定します。
redis-server に対して、volumes でマウントしたコンフィグファイルを指定して実行しています。
MariaDB の Dockerfile
FROM mariadb:10.1.12 COPY ./docker-entrypoint-initdb.d/* /docker-entrypoint-initdb.d/ VOLUME /etc/localtime:/etc/localtime:ro RUN sed -i -e "s/\(\[mysqld\]\)/\1\ncharacter-set-server = utf8/g" /etc/mysql/my.cnf RUN sed -i -e "s/\(\[client\]\)/\1\ndefault-character-set = utf8/g" /etc/mysql/my.cnf RUN sed -i -e "s/\(\[mysqldump\]\)/\1\ndefault-character-set = utf8/g" /etc/mysql/my.cnf RUN sed -i -e "s/\(\[mysql\]\)/\1\ndefault-character-set = utf8/g" /etc/mysql/my.cnf RUN sed -i -e "s/^#bind-addresss*=s*0.0.0.0/bind-address=0.0.0.0/" /etc/mysql/my.cnf
FROM
mariadb イメージを利用しています。バージョン指定で 10.1.12 を利用。
COPY
事前に用意した configure.sh が入っているフォルダをコンテナ内へコピーしています。
VOLUME
時計をローカルに合わせています。
最後の「ro」は ReadOnly の略で読み取り専用にしてあります。
RUN
my.cnf に対して文字列痴漢を利用して設定変更を行っています。
上の4つは文字コードの設定、下は外部からの接続を許可するバインドアドレスの設定をしています。
Laravel と Nginx
次にLaravelとNginxの設定を行います。
設定するファイルはメインの docker-compose.yml です。
中身はこんな感じになっています。
version: '2' services: php: build: context: server/docker/php volumes: - "${PWD}/data/php/develop:/var/www/html" environment: DB_HOST: db DB_PORT: 5432 REDIS_HOST: redis REDIS_PORT: 6379 nginx: build: context: server/docker/nginx ports: - "8080:80" links: - php db: extends: file: storage-compose.yml service: db expose: - "3306" redis: extends: file: storage-compose.yml service: redis expose: - "6379"
※新しく出てきたものだけ説明します。
Nginx
ports
外部からコンテナへのポートフォワードを設定します。
8080:80 と記述すると、コンテナのIPの 8080 ポートに対してアクセスが来たら
80 ポートにポートフォワードされるようになります。
links
他のコンテナとリンクします。
docker run コマンドで -lilnk を指定するのと同じです。
DB, Redis
extends
別の yml ファイルに設定されている内容を継承します。
file に指定するのが yml フィアルの名称で、service に指定するのがコンテナ名(サービス名)です。
expose
コンテナの指定ポートを外部へ公開する設定です。
80 を指定すると、外部からコンテナの 80 ポートへアクセスが可能になります。
Laravel の Dockerfile
FROM php:fpm WORKDIR /var/www/html
WORKDIR
コンテナにログインした時に最初に表示されるフォルダを指定します。
Nginx の Dockerfile
FROM nginx:1.9.12 ADD conf/default.conf /etc/nginx/conf.d
FROM
nginx イメージの 1.9.12 バージョンを利用しています。
ADD
事前に用意した nginx のコンフィグファイルを対象フォルダへコピーしています。
Nginx のコンフィグファイル
NginxとPHPのコンテナが別々なので、NginxへのアクセスをPHPコンテナへ流す必要がある。
そのためのNginxのコンフィグファイルはこんな感じで設定するとうまくいった。
server { listen 80 default; server_name localhost; charset utf-8; root /var/www/html; #access_log /var/www/html/access.log; #error_log /var/www/html/error.log; access_log /dev/stdout; error_log /dev/stdout; #rewrite ^(.+)/$ $1; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { root /var/www/html/public; fastcgi_pass php:9000; fastcgi_index index.php; #fastcgi_split_path_info ^(.+\.php)(.+)$; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } }
フォルダ構成
もう一度フォルダ構成を載せておきます。
. ├── data │ └── php ├── docker-compose.yml ├── server │ └── docker │ ├── mariadb │ │ ├── Dockerfile │ │ └── docker-entrypoint-initdb.d │ │ └── configure.sh │ ├── nginx │ │ ├── Dockerfile │ │ └── conf │ │ └── default.conf │ ├── php │ │ └── Dockerfile │ └── redis │ └── redis.conf └── storage-compose.yml
この状態で、ルートフォルダにて下記コマンドを実行すると正常にサービスが起動するはずです。
$ docker-compose build $ docker-compose up -d $ docker ps -a ONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 01121a809ee9 laravel_db "/docker-entrypoint-i" 2 seconds ago Up 1 seconds 3306/tcp laravel_db_1 80802a0855e4 laravel_nginx "nginx -g 'daemon off" 2 seconds ago Up 2 seconds 443/tcp, 0.0.0.0:8080->80/tcp laravel_nginx_1 31004578e508 laravel_php "php-fpm" 2 seconds ago Up 2 seconds 9000/tcp laravel_php_1 5b4b17aa0840 redis:3.0.5 "redis-server /usr/lo" 3 seconds ago Up 2 seconds 6379/tcp laravel_redis_1
ハマった点
・NginxコンテナからPHPコンテナへルーティングするための、Nginxの設定が難しかった。
・Laravelのstorageフォルダ、bootstrapフォルダに対して、777権限を与えないと動かなかった。
(Laravelの公式ドキュメントに権限付与してくださいってちゃんと書いてあった・・・)
まとめ
・DockerComposeは一度設定すると次回から起動・停止が非常に楽にできて便利だが、
最初の構築するまでにひたすらつまずきポイントがあり、かなり時間を食ってしまう。
・DockerComposeで環境構築をするときは、まずひとつ1つのコンテナをしっかりと構築していくとうまくいきやすい。
ChatWork Send To ALL
ブログを始めて間も無いのにすでに数週間も間が開いてしまいました…。
今日はちょっと珍しいことをしたので記事を書きたいと思います。
みなさん、チャットワーク使ってますか?
きっといろいろな企業の方がチャットワークを使われていることと思います。
チャットワークは非常に便利なので私も公私ともに使っておりとても助かっています。
今回試したこと
チャットワークの[TO]ボタンを押すと開く宛先追加ポップアップで、「すべて選択」を押した際に
縦長に宛先がズラーッと並べられてしまうものを、もっと見やすくしよう!
ということにチャレンジしてみました。
Chrome Store「ChatWork Send To ALL」
chrome.google.com
本来であればこんな感じに…
[TO] ● 相手の名前1 [TO] ● 相手の名前2 [TO] ● 相手の名前3 [TO] ● 相手の名前4 [TO] ● 相手の名前5 ・ ・ ・
縦長にズラーッと並んでしまうのですが、今回作成した「ChatWork Send To ALL」をインストールすると
こんな感じに横並びにズラーッと並ぶようになります。
[TO] ● [TO] ● [TO] ● [TO] ● [TO] ● ・・・
メリット
・見た目がすっきりします。
・全員にTOを付けて送る敷居が下がります。
・全員にちゃんとPUSH通知が飛びます。
デメリット
・表示がシンプルになったせいで乱用される可能性が増えた。
・従来の「すべて選択」機能を上書いているので、従来のまま使いたくなったらアンインストールが必要
まとめ
自分の所属する会社で実際に公開してみたところ、意外にも需要があった。
見た目がシンプルになるのはとても重要なことだと思う。
同じような不満を抱えている方は是非使ってみてください。
DockerのUbuntuコンテナにScala開発環境を構築
この記事を書くに至った動機
エンジニアにはあるあるですが環境構築途中で失敗して、一度削除してまたいちから作成する時に調べ直さなくてもいいように手順を記録していきたいと思います。
(もうすでに1回やり直してます。。)
環境構築の手順
・ベースとなる Ubuntu コンテナの作成
・Redisサーバのインストール
・MySQLサーバのインストール
・JDK 8 のインストール
・Play Framework (Activator) のインストール
・新規プロジェクトの作成
・アプリケーションの起動
・ブラウザからアクセスして確認
・コンテナの保存
・ポートフォワード設定をして実行
・再度ブラウザからアクセスして確認
かなり長い道のりで、おそらくすんなりいかずに1日がかりの作業になると思いますが
頑張ってベースとなる開発環境構築の手順をお伝えできたらと思います。
Ubuntu コンテナの作成
まずは空の Ubuntu コンテナを作成します。
タグは「Trusty」を使います。
$ docker run -it --name develop ubuntu:trusty /bin/bash
すぐに exit してコンテナが正しく作成されたかを確認してみます。
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0309d0f2f1bd ubuntu:trusty "/bin/bash" 5 minutes ago Up 5 minutes develop
正常にコンテナが作成されていることを確認したら再度コンテナに入ります。
$ docker exec -it develop /bin/bash
Redisサーバのインストール
とりあえずホームディレクトリに移動したのち、「redis-server」をインストールしたいと思います。
$ cd ~ $ apt-get update $ apt-get install -y redis-server
少し待つとインストールが完了します。
早速Redisサーバを起動しておきしょう。
正しく起動したかどうかの確認も忘れずに。
$ service redis-server start Starting redis-server: redis-server. $ps -ef | grep redis redis 209 1 0 05:45 ? 00:00:00 /usr/bin/redis-server 127.0.0.1:6379 root 213 46 0 05:45 ? 00:00:00 grep --color=auto redis
MySQLサーバのインストール
次はMySQLのインストールです。
インストール時に root ユーザのパスワード入力を求められるので入力します。
$ apt-get install -y mysql-server
少し待つとインストールが完了します。
こちらも忘れずにMySQLサーバを起動しておきましょう。
$ service mysql start * Starting MySQL database server mysqld [ OK ] * Checking for tables which need an upgrade, are corrupt or were not closed cleanly. $ps -ef | grep redis root 754 1 0 05:48 ? 00:00:00 /bin/sh /usr/bin/mysqld_safe mysql 1101 754 0 05:48 ? 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 root 1265 46 0 05:49 ? 00:00:00 grep --color=auto mysql
JDK 8 のインストール
次はJavaをインストールします。
Play Framework を利用するにはJDK8以上が必要なようです。
Ubuntu 14.04 では公式リポジトリに JDK8 が用意されていないとのこと。
サードパーティ製のリポジトリを追加してインストール必要があります。
そこで登場するのが「add-apt-repository」ですが、空のUbuntuにはこれすらもありません。
まずは使えるように設定をします。
$ apt-get install -y apt-file $ apt-file update $ apt-file search add-apt-repository
検索して見つかったリポジトリをインストールします。
$ apt-get install software-properties-common
ここまでやるとやっと「add-apt-repository」が使えるようになります。
アップデートを忘れずに実行し、続けて JDK8 をインストールします。
$ apt-add-repository ppa:openjdk-r/ppa $ apt-get update $ apt-get install -y openjdk-8-jdk
しばらく待つとインストールが完了するので、バージョンを確認してみます。
$ java -version openjdk version "1.8.0_72-internal" OpenJDK Runtime Environment (build 1.8.0_72-internal-b15) OpenJDK 64-Bit Server VM (build 25.72-b15, mixed mode) $javac -version javac 1.8.0_72-internal
Play Framework (Activator) のインストール
最後に Scala の Framework である、Play Framework をインストールします。
まずは下記のサイトで配布されている Activator という zip ファイルを wget で取得します。
2016年2月25日時点での最新版は Play 2.4.6 / Activator 1.3.7 のようです。
https://www.playframework.com/download
wget が使えない場合は、wget を先にインストールします。
$ apt-get install -y wget
適当なフォルダ(今回はActivator)を作成し、先ほどの zip ファイルをダウンロードします。
$ mkdir Activator $ cd Activator $ wget https://downloads.typesafe.com/typesafe-activator/1.3.7/typesafe-activator-1.3.7-minimal.zip
ダウンロードが完了したら zip ファイルを解凍します。
解凍するには unzip コマンドを使いますが、例に漏れずこれもインストールが必要です。
$ apt-get install -y unzip
unzip のインストールができたら早速ダウンロードした zip ファイルを解凍します。
$ unzip typesafe-activator-1.3.7-minimal.zip
一瞬で解凍が終わりますが、解凍した後はフォルダが1つ作成されていると思います。
$ ls -al drwxr-xr-x 3 root root 4096 Feb 25 06:18 ./ drwx------ 3 root root 4096 Feb 25 06:13 ../ drwxr-xr-x 2 root root 4096 Dec 2 20:27 activator-1.3.7-minimal/ -rw-r--r-- 1 root root 1056830 Dec 3 01:28 typesafe-activator-1.3.7-minimal.zip
中に入って内容を確認してみます。
$ cd activator-1.3.7-minimal $ ls -al drwxr-xr-x 2 root root 4096 Dec 2 20:27 . drwxr-xr-x 3 root root 4096 Feb 25 06:18 .. -rwxr--r-- 1 root root 9507 Dec 2 20:27 activator -rw-r--r-- 1 root root 1213545 Dec 2 20:27 activator-launch-1.3.7.jar -rwxr--r-- 1 root root 7342 Dec 2 20:27 activator.bat
この activator というファイルは今後よく使うことになるためパスを通しておきます。
$ pwd /root/Activator/activator-1.3.7-minimal $ env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $ export PATH=$PATH:/root/Activator/activator-1.3.7-minimal $ env | grep PATH PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/root/Activator/activator-1.3.7-minimal
こんな感じになったかと思います。
これでいつでもどこでも activator コマンドが利用できます。
新規プロジェクトの作成
新しくプロジェクトを作成するのはコマンドひとつで行えます。
まずはプロジェクト用のフォルダを作成して、その中で「activator new」コマンドを実行します。
※初回実行時のみいろいろインストールされるので非常に時間がかかります。コーヒーでも飲みながら気長に待ちましょう。
$ mkdir sampleapp $ cd sampleapp $ activator new <appname(省略可)> <apptype(省略可)> # ひとまずは「activator new」のみで実行してみてください
事前ダウンロードなどが終わると以下のような画面が出てくると思います。
Browse the list of templates: http://typesafe.com/activator/templates Choose from these featured templates or enter a template name: 1) minimal-akka-java-seed 2) minimal-akka-scala-seed 3) minimal-java 4) minimal-scala 5) play-java 6) play-scala (hit tab to see a list of all templates)
今回は Scala を利用するので「play-scala」と入力してリターンキーを押します。
するとさらに今度はアプリケーションの名前の入力を求められます。
好きな名前を入力しましょう。未入力時は「play-scala」が設定されるようです。
> play-scala Enter a name for your application (just press enter for 'play-scala') > sampleapp OK, application "sampleapp" is being created using the "play-scala" template. To run "sampleapp" from the command line, "cd sampleapp" then: /root/Activator/sampleapp/sampleapp/activator run To run the test for "sampleapp" from the command line, "cd sampleapp" then: /root/Activator/sampleapp/sampleapp/activator test To run the Activator UI for "sampleapp" from the command line, "cd sampleapp" then: /root/Activator/sampleapp/sampleapp/activator ui
こんなメッセージが表示されたらプロジェクトファイル群がすでに作成されています。
アプリケーション名で新たにフォルダが作成されているので、構成を見てみましょう。
$ cd sampleapp $ ls -al -rw-r--r-- 1 root root 591 Feb 25 06:34 LICENSE -rw-r--r-- 1 root root 148 Feb 25 06:34 README -rwxr--r-- 1 root root 9507 Feb 25 06:34 activator -rw-r--r-- 1 root root 1213545 Feb 25 06:34 activator-launch-1.3.7.jar -rwxr--r-- 1 root root 7342 Feb 25 06:34 activator.bat drwxr-xr-x 4 root root 4096 Feb 25 06:34 app -rw-r--r-- 1 root root 472 Feb 25 06:34 build.sbt drwxr-xr-x 2 root root 4096 Feb 25 06:34 conf drwxr-xr-x 2 root root 4096 Feb 25 06:34 project drwxr-xr-x 5 root root 4096 Feb 25 06:34 public drwxr-xr-x 2 root root 4096 Feb 25 06:34 test
これがデフォルト状態(空状態)のプロジェクトファイル構成になります。
ここら辺については Play Framework のチュートリアルやドキュメントで詳しく書かれていますのでそちらを参照してみてください。
アプリケーションの起動
作成した空のアプリケーションを実行してみたいと思います。
実行時にも「activator run」コマンドを利用します。
アプリケーション作成時同様、初回のみいろいろダウンロードしたりチェックが行われたりして非常に時間がかかりますので大人しく待ちましょう。
$ activator run ・ ・ ・ --- (Running the application, auto-reloading is enabled) --- [info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 (Server started, use Ctrl+D to stop and go back to the console...)
こんな表示が出たら見事アプリケーションの起動に成功です!!
おめでとうございます!!
ブラウザからアクセスして確認
アプリケーションが起動したら、実際に見てみたいですよね?
というわけで、早速ブラウザからアクセスしてページを表示してみましょう!
VM環境のIPアドレスとポート番号9000を入力してリターン!
残念つながりませんでした・・・。
でもこれ、当然繋がらなくて当たり前ですよね。
最初にコンテナを起動するときにポートフォワード設定をせずに起動していますから。
コンテナの9000番ポートに対してアクセスするには一度コンテナから抜けて、コンテナ起動時に9000番ポートに対してポートフォワード設定を指定する必要があります。
が、ここで問題が・・・。
ポートフォワード指定は「docker run」コマンド実行時しかできないため、一度コンテナを削除する必要があります。
ここまで数時間かけて作ってきたコンテナを破棄するなんて…。
ということでコンテナを削除する前にここまで設定したコンテナを保存したいと思います。
コンテナの保存
一度コンテナから抜けるために exit して、以下のコマンドを実行します。
$ docker commit -m "ここにコメントが書けます" <Image Id> <Image Name> $ docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE develop latest 8c7f1c246564 26 seconds ago 1.192 GB
無事にイメージとして保存することができました。
ポートフォワード設定をして実行
develop コンテナを本当に削除して作り直してもいいんですが、ビビリな僕は残したまま別コンテナとして立ち上げることにします。
コンテナ名を「develop9000」、イメージはさっき自分で作成した「develop」イメージを利用します。
$ docker run -it -p 9000:9000 --name develop9000 develop /bin/bash $ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ca7253918d2 develop:latest "/bin/bash" About a minute ago Exited (0) 3 seconds ago develop9000 0309d0f2f1bd ubuntu:trusty "/bin/bash" 4 hours ago Exited (0) 2 hours ago develop
無事に起動されました。
それでは、前の手順に合わせて sampleapp を実行してブラウザで確認してみたいと思います。
まずは作成したコンテナへ入ります。
$ docker start develop9000 $ docker exec -it develop9000 /bin/bash
プロジェクトがあるフォルダへ移動して「activator run」コマンドを実行します。
コンテナを一度抜けるとパス設定が元に戻っていたようなので再度設定しておきます。
$ export PATH=$PATH:/root/Activator/activator-1.3.7-minimal $ cd /root/Activator/sampleapp/sampleapp $ activator run [info] Loading project definition from /root/Activator/sampleapp/sampleapp/project [info] Set current project to sampleapp (in build file:/root/Activator/sampleapp/sampleapp/) --- (Running the application, auto-reloading is enabled) --- [info] p.c.s.NettyServer - Listening for HTTP on /0:0:0:0:0:0:0:0:9000 (Server started, use Ctrl+D to stop and go back to the console...)
今回は2回目の実行なので初回に比べたらはるかに早く起動しました。
VirtualBoxのディスク容量を拡張する
VirtualBoxで作業をしていると、想定よりディスクを使用してしまい容量不足になることがあると思います。
作業内容そのままでディスク容量を拡張する手順を残しておきたいと思います。
ディスク容量拡張の手順
・新規ディスクを追加する
・コマンドでHDDをクローンする
・古いディスクをアンマウント
新規ディスクを追加する
まず対象VMの設定画面からストレージメニューを開きます。
ストレージ一覧の右側にあるディスクの+マークを押します。
デフォルト選択が既存ディスクになっていますが間違えないように「新規ディスクの作成(N)」を押します。
するとハードディスクのタイプ選択が求められるので前とVDIを選択して進めます。
ディスクのサイズについては好きな方を選択してください。
ちなみに固定サイズの方が少しだけ速度が速くなるようです。
最後にディスクの名前と容量を決めたら「作成」ボタンを押します。
注意点としては既存のディスクよりも大きい容量にするようにしましょう。
そうしないとこの後行うディスクのクローン作業がおかしくなると思います(^^;
新しいディスクが作成されました。
コマンドでHDDをクローンする
ストレージを選択すると右側にファイルパスが表示されると思います。
ターミナルを開き、この VDI ファイルが置いてあるところまで移動しましょう。
移動したら下記のコマンドを実行してディスクのコピーを行います。
パーセンテージが表示され、100% になれば完了です。
$ VBoxManage clonehd --existing "Ubuntu 14.04 LTS.vdi" "New Ubuntu 14.04.vdi" 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'VDI'. UUID: 4cc3e925-****-4d78-****-5abfe3e36cf8
古いディスクをアンマウント
無事にディスクのコピーが終わったら、起動させるディスクを変更します。
先ほどのストレージ設定画面で古いディスクを削除します。
削除といっても設定が削除されるだけで物理的にはファイルとして残っていますので安心してください。
古いディスクを選択して下部にあるディスクの「ー」ボタンを押すと削除が完了します。
最終的にはこんな感じになると思います。
ここまででディスクの差し替えは完了です。
VM上でパーティション調整(BIOS作業)
パーティションの調整は BIOS 上で行う必要があります。
まず下記のサイトで GParted パーティション編集ツールのイメージファイルをダウンロードします。
GParted Live CD/USB/HD/PXE Bootable Image の Stable Releases にある iso ファイルをダウンロードします。
2016年2月25日時点での最新版は「Download gparted-live-0.25.0-3-i686.iso」のようです。
http://gparted.org/download.php
ダウンロードしたら、パーティションを変更したい VM の設定画面を開きストレージメニューを開きます。
CD設定部分へ先ほどダウンロードしたイメージファイルを設定して IDE プライマリマスターに設定します。
その状態で VM を起動すると BIOS 上で GParted が立ち上がります。
項目2つ目の「Other modes of GParted Live」を選択します。
次は一番上の「GParted Live (Default settings, KMS)」を選択します。
keymap について質問されますが、「Don't touch keymap」を選択したままエンターを押します。
次に言語設定を聞かれるため、「Japan」の 15 を入力してエンターを押します。
最後にモードを聞かれますが、何も入力しなくても大丈夫なのでそのままエンターを押します。
こんな画面が起動します。
実はこの画面…
もうパーティション設定が終わった状態です。
途中のキャプチャを撮るのを完全に忘れていました。。
というわけで、足りない部分は言葉で説明しながら手順を紹介したいと思います!
構成として、まずメインストレージ領域があり、次に linux-swap 領域、最後に未割り当て領域になっていると思います。
この状態のままだと後方に空き領域がなく、メインストレージの領域を拡張することができません。
そのためまず最初に linux-swap 領域を大胆に削除します。
次にその親の領域も削除します。
メインストレージである /dev/sda1 以降に未割り当て領域しかない状態になりました!
この状態で /dev/sda1 のリサイズ作業を行います。
後方に 2GB ほどの領域を残した状態で、好きなサイズまで拡張していきます。
設定が終わったら「リサイズ/移動」ボタンで確定させます。
次に先ほど消してしまった linux-swap 領域をもう一度設定します。
まずは未割り当て領域全てを拡張領域として追加します。
未割り当て領域を右クリックして「New」を選択します。
種類のところを「拡張パーティション」に設定して「Add」ボタンを押します。
こんな感じになったと思います。
これで新規パーティション#1 の配下に未割り当て領域が移動したと思います。
この状態から未割り当て領域を右クリックし、さらに「New」で linux-swap 領域を作っていきます。
ファイルシステムのところを「linux-swap」に変更して「Add」ボタンを押します。
こちらは「論理パーティション」で大丈夫です。
こんな感じになりました。
これでパーティションの設定自体は完了です。
「Apply」ボタンを押して設定したパーティションを確定させましょう!
これでパーティション設定は全て完了です。
VM をシャットダウンし、先ほど設定していた CD ブートからイメージファイルを取り出して再起動すれば無事にディスク容量が増えていると思います。
早速ログインして容量を確認してみます。
$ df -h Filesystem Size Used Avail Use% Mounted on /dev/sda1 14G 5.4G 7.6G 42% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 991M 12K 991M 1% /dev tmpfs 201M 900K 200M 1% /run none 5.0M 4.0K 5.0M 1% /run/lock none 1002M 72K 1001M 1% /run/shm none 100M 28K 100M 1% /run/user
空き領域がだいぶ増えていますね!
同じような状況の方の参考に少しでもなれば幸いですm(_ _)m