alias設定することでviコマンドでvimを起動する

Gakuです。
最近よくvimを使っているのですが、viコマンドとvimコマンドで起動するvimが異なっており、いろいろうざい感じになっていました。
alias設定を行うことで、viでもvimでもどちらのコマンドでもvimコマンドで立ち上がるvimになるように設定しました。

alias vi='vim'

エイリアス設定を行うことで、viコマンドでもvimコマンドで立ち上がるvimが起動するように設定できます。

おわりに

alias便利っすね!
docker-composeコマンドとか長くてうざいので、エイリアス設定すればいろいろ楽になりそうです( ´Д`)y━・~~
シェル芸もっと極めたい。。。

Vagrantで「default: Warning: Connection reset. Retrying…」が繰り返される現象の解消法

Gakuです。

最近、golangとかreactとかdockerとかばかりやってて、1年ほどvagrantを触っていませんでした。
今回、RoRやるためにちょっとvagrantを触ったら盛大にハマったので、そのハマり内容&解消法を記載したいと思います。

ハマり内容

Vagrantbox.esから、Ubuntu 16.04 with Docker enabled (based on amd64 server iso file)のファイルを追加したら、以下内容で全く処理が終了しない現象に陥りました。

takehiro-hidakanoMacBook-Pro:ubuntu gaku$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 80 (guest) => 3000 (host) (adapter 1)
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    ...

SSHあたりの設定を試みるも

文献漁っていると、「公開鍵・秘密鍵の設定を適切に設定すれば動くよ!」という助言があったため、その内容を適用したりもしましたが、結局

default: Warning: Connection reset. Retrying...
default: Warning: Remote connection disconnect. Retrying...

が永遠に繰り返される現象は解消しませんでした。

解消法

いろいろ文献漁っているとVagrantbox.esのboxはあまりよろしくないとのこと。
何やら、vagrantの公式boxサイトがあるとのことなので、以下リンク先のものを設定し、再度挑戦
[blogcard url=”https://app.vagrantup.com/ubuntu/boxes/xenial64″][/blogcard]

すると

takehiro-hidakanoMacBook-Pro:ubuntu gaku$ vagrant up
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Box 'ubuntu/xenial64' could not be found. Attempting to find and install...
    default: Box Provider: virtualbox
    default: Box Version: >= 0
==> default: Loading metadata for box 'ubuntu/xenial64'
    default: URL: https://atlas.hashicorp.com/ubuntu/xenial64
==> default: Adding box 'ubuntu/xenial64' (v20170626.0.0) for provider: virtualbox
    default: Downloading: https://app.vagrantup.com/ubuntu/boxes/xenial64/versions/20170626.0.0/providers/virtualbox.box
==> default: Box download is resuming from prior download progress
==> default: Successfully added box 'ubuntu/xenial64' (v20170626.0.0) for 'virtualbox'!
==> default: Importing base box 'ubuntu/xenial64'...
==> default: Matching MAC address for NAT networking...
==> default: Checking if box 'ubuntu/xenial64' is up to date...
==> default: Setting the name of the VM: ubuntu_default_1499084159453_22500
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: ubuntu
    default: SSH auth method: password
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default: Warning: Connection reset. Retrying...
    default: Warning: Remote connection disconnect. Retrying...
    default:
    default: Inserting generated public key within guest...
    default: Removing insecure key from the guest if it's present...
    default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Machine booted and ready!
==> default: Checking for guest additions in VM...
    default: The guest additions on this VM do not match the installed version of
    default: VirtualBox! In most cases this is fine, but in rare cases it can
    default: prevent things such as shared folders from working properly. If you see
    default: shared folder errors, please make sure the guest additions within the
    default: virtual machine match the version of VirtualBox you have installed on
    default: your host and reload your VM.
    default:
    default: Guest Additions Version: 5.0.40
    default: VirtualBox Version: 5.1
==> default: Mounting shared folders...
    default: /vagrant => /Users/gaku/src/vagrant/ubuntu
takehiro-hidakanoMacBook-Pro:ubuntu gaku$ vagrant ssh
Welcome to Ubuntu 16.04.2 LTS (GNU/Linux 4.4.0-83-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  Get cloud support with Ubuntu Advantage Cloud Guest:
    http://www.ubuntu.com/business/services/cloud

0 packages can be updated.
0 updates are security updates.


ubuntu@ubuntu-xenial:~$ ls

余裕の解消( ^∀^)b

おわりに

やはり、定期的にいろいろ触らないとダメですねw
vagrantの公式boxサイトがあるとは知りませんでした。昔はVagrantbox.esが主流でしたが(※僕の中では)今度からは公式サイトを使用していきたいと思います。

不動産屋が冷やし組み込み系はじめました

夏です。Gakuです。

最近IoT業界あっちいっす。
なので、それに便乗してArduinoで組込系を触ってみようと思い立ちました。

ってことでサクッと購入

スクリーンショット 2017-06-25 18.57.45
https://www.amazon.co.jp/gp/product/B00UKXHKXC/ref=oh_aui_detailpage_o00_s00?ie=UTF8&psc=1
4000円行かない値段なのにめっさいろいろ入ってますw
本当のarduinoではなく、中華製のarduinoなのかも知れませが、動けばOKですw
多分、これだけで当分遊べそうな予感がします。

とりあえずArduinoのIDEダウンロード

スクリーンショット 2017-06-25 17.55.15
「Arduino IDE Mac OS X 10.7 Lion or newer」をダウンロードします。
スクリーンショット 2017-06-25 17.58.01
donateせずにDownloadする場合は「just download」でダウンロードできます。
あとはダウンロードしたzipファイルを解凍して、起動するだけでOKです。
スクリーンショット 2017-06-25 18.00.11

とりあえずHelloWorld書いてみます(Lチカ)

こんな感じでコード書いてみました。

void setup()
{
  pinMode(2, OUTPUT);
}

void loop()
{
   digitalWrite(2, HIGH);
   delay(1000);
   digitalWrite(2, LOW);
   delay(1000);
}

C言語ですね。はい。
今まで完全に避けてきた言語です(挫折経験ありっす。)
まぁ、今のプログラミングレベルなら攻略可能だろう(´・ω・`)

回路はどっかのサイトのやつを適当に組んでこんな感じで動きました。

うぉおおおお!テンション上がるぅうう!
なテンションを感じつつ、無言で撮影しています(´・ω・`)

これだけじゃ面白くないので、LED3連結してLチカしたのが以下です。

電圧?電流?どっちかが不足していて、ヨワヨワしい感じですね。
増幅器?でも購入して、電流か電圧を上げて上げればもう少し良い感じになりそうっすね。(何もわかっていない)

おわりに

これなら、小学生でもできるほど簡単な電子工作でした。
今のところ作りたいのが
・犬の餌やり自動化BOX
・アクアリウム関連の自動化
・水やりの自動化
・フリスクケースに入った何か。

といろいろありますので、、週末DIY程度にゆったりまったり作って行こうと思います。(´・ω・`)

それにしても、最近Web周りの開発がマンネリ化していたので、組み込み系やると刺激があって楽しかったです。
第1次産業の自動化は今年あたりからぐっと来ると予想しているので、Web系プログラミングがマンネリ化している方は一緒にはじめましょう(´・ω・`)b

docker-composeを使って複数コンテナの管理を簡易化する

Gakuです。

前回はdockerを使用し、railsコンテナとpostgreSQLコンテナを立ち上げ連携する方法を掲載しました。
[blogcard url=”http://160.16.72.126/?p=569″][/blogcard]

今回はdocker-composeなるものを導入し、複数コンテナの管理を簡易化したいと思います。

docker-composeとは何ぞ?

ここらへんの記事をみると幸せになれるかもしれません。
[blogcard url=”http://qiita.com/y_hokkey/items/d51e69c6ff4015e85fce”][/blogcard]

複数コンテナを1コマンドで立ち上げたり、docker run時のめんどうなオプションを記述して管理できる仕組みです。

ファイル構成

ファイル構成は下記のような感じで構成します。

.
├── docker-compose.yml
└── rails
    └── Dockerfile

Dockerfileは前回と同様のDockerfileを使用しております。

docker-compose.ymlの編集

postgreSQLとrailsコンテナを管理するため、docker-compose.ymlを下記のように編集します。

postgres0:
  image: postgres:9.5.4
  ports:
    - 5432:5432
rails:
  build: rails
  ports:
    - 3000:3000
  volumes:
    - /Users/gaku/Documents/develop/projects:/usr/src/docker-rails-test
  links:
    - postgres0:postgres0
  tty: true

設定内容はdocker run時のオプションと似ているのでとっつきやすいかと思います。

これで準備完了です( ^ω^ )

実行してみる

実行はすごく簡単です。

docker-compose build //イメージの作成
docker-compose pull  //イメージのダウンロード
docker-compose up -d //コンテナの生成

たったこれだけです。
3コマンドで全てのコンテナのイメージ作成からコンテナ生成までやってくれます。
こ。。。これがdockerの強さか。。。

後片付けのコマンド

コンテナの後片付けもすごく簡単です。

docker-compose stop //全てのコンテナの停止
docker-compose rm   //全てのコンテナの削除

今まで一つ一つコンテナを削除していたのですが、これで一気に削除できます。
う〜ん。きもちぃε-(´∀`; )

/bin/bashが起動できない

今までdocker run -it コマンドでbashを立ち上げる設定をしていたのですが、docker-composeには-i相当の機能がないらしい。
(-tはdocker-composeのtty:trueの記述が該当している。)

なので、docker-composeで/bin/bashを立ち上げる場合、下記コマンドで実行してあげる必要がある。

docker exec -it <コンテナID> bash

おわりに

docker-composeを知るまで、

「dockerめんどくせぇな〜。vagrant+virtualBOXのが良いんじゃね(´q` )」
って思っていましたが、今回composeやってみて世界が変わりました。

dockerで設定すれば、もう環境構築ほとんどやらんでええやん!すばらしき世界!

2日間dockerを触ってきて、だいたいのことはできるようになりました。
今度はheroku上のdocker-herokuなるもので、herokuへのUPを試みたいと思います( *`ω´)

DockerでpostgreSQLを導入しrailsと連携する

Gakuです。

前回までで、Dockerfileからrails環境を構築する方法を掲載してきました。
[blogcard url=”http://160.16.72.126/?p=562″][/blogcard]

今回はpostgreSQLコンテナを作成し、railsコンテナと連携する方法を掲載したいと思います。

postgreSQLコンテナの準備

下記コマンドを実行することで、postgreSQLコンテナを作成できます。

docker pull postgres:9.5.4
docker run --name pos-con -p 5432:5432 -d postgres

簡単すぎる( ^ω^ )

railsコンテナの準備

下記コマンドを実行しrailsコンテナを作成します。

docker run -it -p 3000:3000 -v "$PWD":/usr/src/docker-rails-test --name railstest --link pos-con:pos-con  gaku/rails

(※–linkオプションが今回の肝です。)

で、仮想環境へアクセスされると思うので、対象のフォルダでrails newします。

rails new postgretest -d postgresql

これで準備完了です。

database.ymlを編集しpostgreSQLとコネクトする

railsのdatabase.ymlのdefault部分を下記のように編集し、postgreSQLコンテナとドッキングします。

default: &default
  adapter: postgresql
  encoding: unicode
  # For details on connection pooling, see rails configuration guide
  # http://guides.rubyonrails.org/configuring.html#database-pooling
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  host: pos-con
  username: postgres

下記コマンドでエラーが出ずdatabaseが作成されれば完了です。

rails db:create

おわりに

案外簡単にpostgreSQLとrailsの連携が可能でした。
今までは単体で起動していた各コンテナを、まとめて立ち上げることが可能なdocker-composeなるものを触ってみようと思います。( ^ω^ )

Dockerでrails環境を構築する

Gakuです。

前回の記事で、Dockerfileを作成しrubyコマンドを実行するところまで備忘録として残しました。
[blogcard url=”http://160.16.72.126/?p=557″][/blogcard]

今回はそのDockerfileを編集し、rails環境を構築します。

Dockerfileを編集

Dockerfileを以下のように編集し、rails環境構築用Dockerfileを作成します。

vi Dockerfile
FROM ruby:2.3.1

ENV APP_ROOT /usr/src/docker-rails-test

#Workディレクトリの設定
WORKDIR $APP_ROOT

#apt-getでtoolのインストール
RUN apt-get update && \
        apt-get install -y nodejs && \
        apt-get install -y vim

#rails導入
RUN gem install --no-ri --no-rdoc rails -v 5.0.0.1

#docker runの-pのヒント これでポート解放されるわけではない
#あくまで道しるべ
EXPOSE 3000:3000

#bashの立ち上げ
CMD ["/bin/bash"]

これで準備完了です( ^ω^ )

railsコンテナを立ててみる

作成したDockerファイルをビルドしてイメージを作成します。

docker build -t gaku/rails .

作成したイメージからコンテナを作成する。

docker run -it -p 3000:3000 -v "$PWD":/usr/src/docker-rails-test gaku/rails

そしたら仮想環境へアクセスする形となるので、いつもどおりrailsアプリケーションを作成してアプリケーションを立ち上げる

rails new test1
cd test1
rails s -b 0.0.0.0

docker-machineのipを確認しておき、そのipでホストPCのブラウザよりアクセスする。
スクリーンショット 2016-08-16 10.21.42

おつかれさまでした〜( ^ω^ )

作成したコンテナを操作する

一旦exitコマンドでコンテナを抜けるとコンテナが終了してしまう。
その際はコンテナを起こしてあげて、アクセスする必要がある。
下記コマンドで上記操作は可能です。

docker start コンテナID
docker attach コンテナID

おわりに

完全にDockerfileのCMDコマンドではまりました。。。つらかった。
CMDでbashを立ち上げるように設定するのがミソですね。
また、docker run時にいろいろなオプションを付けるのですが、その点をミスらなければすんなりrailsの導入は可能です。
次回はDBをpostgreSQLへ変更した場合の対処法などを掲載したいと思ってます。

docker上のrubyでHello World出力してみる

rubyのベースイメージをダウンロードする

Docker上でrubyを実行するために、DockerHubからrubyのイメージをダウンロードします。
下記コマンドでダウンロード可能です。

docker pull ruby:2.3.1

で、プロジェクトフォルダを作成して遷移します。

mkdir docker-rails-test
cd docker-rails-test

test用にtest.rbを作成します。

vi test.rb
puts "Hello World☆*:.。. o(≧▽≦)o .。.:*☆"

これで準備完了です。

docker runコマンドでrubyコードを実行してみる

下記コマンドでdocker上のrubyで先ほど作成したtest.rbを実行してみます。

docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test ruby:2.3.1 ruby test.rb

このコマンドでコンテナを作成することが可能です。
コンテナは作成すると永遠に残り続けるのですが、–rmをつけることで、コマンド実行後コンテナを削除することが可能です。(一時的にコンテナを作成したい時に有効なオプションですね。)
また、-vをつけることでホストコンピュータとdocker上のフォルダを共有フォルダとして設定することが可能です。
今回は
【”$PWD”:/usr/src/docker-rails-test】
としましたが、
【ホストマシンフォルダ:docker上のフォルダ】
でマウントしています。
-wはワーキングフォルダを設定するためのオプションでdocker上の/usr/src/docker-rails-testで作業をしたいため、このオプションをつけております。

その後ろに、イメージ名である「ruby:2.3.1」を記述し、その後ろにrubyの実行コマンドを記述しております。

docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test ruby:2.3.1 ls -a
docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test ruby:2.3.1 pwd

などのコマンドを実施すれば理解が深まるかもしれません。

Dockerfileからrubyファイルを実行してみる

dockerは先ほどダウンロードしたruby:2.3.1のイメージをベースにして、様々な環境をカスタマイズすることが可能です。
その設定をDockerfileというファイルに記述し作成するのですが、その作業を行ってみたいと思います。
とりあえず、Dockerfileを作成して、下記のように記述してみます。

vi Dockerfile
FROM ruby:2.3.1

はい。これでDockerFileの準備が完了しました。

Dockerfileをビルドして作成したイメージからrubyコマンドを実行してみる。

さきほど作成したDockerfileをビルドします。

docker build -t my-ruby-app .

これで、my-ruby-appという名前でimageが作成されました。
docker imagesとコマンドを実行すると作成したimageが存在しているのがわかります。

作成したimageからrubyコマンドを実行するために下記コマンドを実行してみます。

docker run --rm -v "$PWD":/usr/src/docker-rails-test -w /usr/src/docker-rails-test  my-ruby-app  ruby test.rb

簡単ですね☆*:.。. o(≧▽≦)o .。.:*☆

おわりに

なんとな〜くですが、Dockerさんと仲良くなれてきた気がします。
今度はDockerfileを編集してrailsを導入したいな〜っと思ってます。

docker-machineを自動起動するように設定する

dockerを起動する際、毎回毎回下記コマンドを実行するのはめんどうくさいです。

docker-machine start
eval "$(docker-machine env default)"

ってことで自動化します。

ホストマシン起動時にdocker-machineを自動起動する設定

~/Library/LaunchAgents以下に[com.docker.machine.default.plist]という名前でファイルを作成し、下記内容を記述します。

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
    <dict>
        <key>EnvironmentVariables</key>
        <dict>
            <key>PATH</key>
            <string>/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin</string>
        </dict>
        <key>Label</key>
        <string>com.docker.machine.default</string>
        <key>ProgramArguments</key>
        <array>
            <string>/usr/local/bin/docker-machine</string>
            <string>start</string>
            <string>default</string>
        </array>
        <key>RunAtLoad</key>
        <true/>
    </dict>
</plist>

これでホストマシン起動時に自動でdocker-machineが立ち上がります。
また、defaultとなっている部分を編集すれば、任意のdocker-machineを自動起動することが可能です。

環境変数の設定

下記コマンドを実行し、bash_profileに書き込みます。

echo 'eval "$(docker-machine env default)"' >> ~/.bash_profile

以上です。これでホストマシン起動時にdocker-machineを自動起動し、環境変数を設定してくれます。

注意点

ホストマシンを起動して、すぐにターミナルを起動するとdocker-machineが起動していない状態で環境変数を通しに行ってしまうためエラーが発生してしまいます。
スクリーンショット 2016-08-15 10.27.22

このエラーが発生した場合、少し待ってから再度ターミナルを起動すれば正常に環境変数が適用されます。

おわりに

こういうの楽しいね。好きだわ〜( ^ω^ )

macにdocker環境を構築する方法

Gakuです。

今まではvagrant+virtualBoxで仮想環境上で開発を行っていたのですが、macの初期化を行ったため、これを機会にdockerで開発環境構築を行ってみました。
その際の備忘録です。

そもそもdockerって何よ?

dockerが何者かわからない方は下記の記事を読めば幸せになれるかも。

[blogcard url=”http://paiza.hatenablog.com/entry/docker_intro”][/blogcard]

とりあえずmacにdockerをインストールしてみる

docker toolboxなるものをインストールすればOK
[blogcard url=”https://www.docker.com/products/docker-toolbox”][/blogcard]

インストールが完了したらLaunchpadでDocker Quickstart Terminal.appを実行ししばらく待つ
te

下記のアスキーアートが出力されれば成功です( ´ ▽ ` )ノ
スクリーンショット 2016-08-14 11.40.16
クジラたんだぉ(´Д` )かわいいぉ(´Д` )

とりあえずHello World!

さっきのターミナル上で下記コマンドを実行しHello Worldを出力してみる。

docker run hello-world

スクリーンショット 2016-08-14 11.45.19

Hello Worldが出力されて、正常にインストールが完了したことを確認できました。
☆*:.。. o(≧▽≦)o .。.:*☆

おわりに

これでmacにdockerをインストールするという最初のステップを完了しました。
ここからは具体的な使い方等を勉強し、有益な情報が得られ次第、またブログで報告させていただきたいと思います。

開発者がmacを持っている3つの理由

こんちゃすgakuです(´・ω・`)

週末、平日問わず東京では何かしらの勉強会が毎日どこかで開催している。
たま~にだけど、僕も興味のある題材の勉強会にちょこちょこ参加とかしている。
で、ふと思うんだけど、開発者はみんなmac!
メモ取るのにみんなmac!
スタバでのmacの比率じゃないよ

mac!mac!mac!mac!

尋常じゃないほどのmac率。

かくいう僕もマッカーなんだけれども、なんで開発者はmacを持っているのかちょっと考えてみた。

1.開発用ツールがそろっている

macを買って一番良かったと思うことは、購入初期から開発用ツール揃ってるな~って印象を受けた。
まず、ターミナルだがbashが標準搭載されている。

bash最高だよbash!コマンドプロンプトとか使いにくいったらありゃしない。
web開発のサーバーってUnixとかLinuxが多いんだけど、そこで使うのがbashでmacもbashなので親和性がすごいある。
ターミナルだけじゃなくて、iOSとか開発するためのXcodeっていうツールも、iPhoneでアプリを入れるのと同じように1クリックで導入可能。
こういうところが開発者がmacを使う理由の1つになってるっぽい。

2.持ち運びの手軽さ

僕はmac book airを購入したんだけど、もうね、軽すぎてやばい!
簡単にさくっと持ち出せて、カフェとかでさくっと開いて、さくっと開発できちゃう。

エンジニアって放浪癖があると思ってて(かくいう僕がそうなので)、いろんなところで開発したい欲求がすごいあるわけで、持ち出しやすい手軽さが開発者に受ける理由なんだろうな~って思ってる。

3.動作の軽快さ

羽根のような軽さを誇っているmacなんですが、そんな軽さに見合わない動作の軽快さがある。
windowsとかって使っているとなんか頻繁にプチフリーズしたりするので、動作が不安定なイメージがある。

macはそれが全くない!

ストレスフリーな開発が可能なのです。

おわりに

使ってみたらわかるけど、本当に手になじむ感じがするmac!
夏のボーナス出たし、まだ持っていない人は買ってみてはいかがでしょうか?

mac信者のブログがお贈りしました(´・ω・`)