Unix上にいつものGit, GitHub環境をつくる
Vagrantなどで新しい仮想環境(Unix)を作るたびにGitの初期設定、GitHubとのSSH設定をぐぐってるような気がするので、記事としてまとめます。
環境について
Gitをインストールする
$ sudo yum install git ... インストール: git.x86_64 0:1.8.3.1-6.el7_2.1 依存性関連をインストールしました: libgnome-keyring.x86_64 0:3.8.0-3.el7 perl-Error.noarch 1:0.17020-2.el7 perl-Git.noarch 0:1.8.3.1-6.el7_2.1 perl-TermReadKey.x86_64 0:2.30-20.el7 rsync.x86_64 0:3.0.9-17.el7 完了しました!
git config 関連を設定する
これを設定しなくても致命的な問題はないですが、GitHub上でアカウントに紐付くEmailをローカルのGitに設定しておくことで、誰がコミットしたものなのかが判別できるようになります。(Git - アカウントの準備と設定)
# 名前を設定する $ git config --global user.name konnobu # メールアドレスを設定する $ git config --global user.email konnobu@email.com # いい感じに出力をカラフルにする $ git config --global color.ui true
GitHubと通信するためにSSH設定をする
鍵を作る
$ ssh-keygen -t rsa -C "your_mail_address@email.com" Generating public/private rsa key pair. Enter file in which to save the key (/home/vagrant/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/vagrant/.ssh/id_rsa. Your public key has been saved in /home/vagrant/.ssh/id_rsa.pub. The key fingerprint is: a2:ee:0c:0c:f8:98:11:a1: your_mail_address@email.com The key's randomart image is: +--[ RSA 2048]----+ |. | |.. | |.o.. | |+.+dw | |.O..=... | |adsaw.. o | | +. o . | +-----------------+
途中で、3回ほど任意のキーワードを入力する必要がありますが、基本的に何も入力せずにエンターのみで進んで大丈夫です。(ただ、パスフレーズを登録したほうがより安全とGitHubは言っています。)
鍵(公開鍵)を確認してコピーする
次に、鍵ができたので公開鍵を確認します。
場所は先程の鍵を作ったときにYour public key has been saved in /home/vagrant/.ssh/id_rsa.pub.
というようになっているので、これをcat
で出力します。
$ cat ~/.ssh/id_rsa.pub ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCrBHfcckGtnkj3N/8mzADcjMsPmh71BuUdwlokkvf7tzpn+R5jHzkKZnEcdbtrwYzrCxMOnrUXXM69gdxFBUCGl+zsDs0XEVMA3tRYEf3OISZAUw2UnVWlu7e8n28YqIZHuVAu5E/92l2zzpKDKuXNjY/dgcZ0jOzaKV2hQxYx84d7NgobQT1IsKyywaNlvdXkv09Y1zC8hF7f4br6iauXtFGC8RWlXcK26FsF6WqJDzX/4ucv6XrdpW2HcA/Nz/mr46/k4M/iA75L52w5JuFjftr81NoCbV2vzg8aDiYj26WInYxAyh4ZGKlEDVbHPhZ6Dq4/en7Wc7uio3NRf7yt "your_mail_address@email.com"
公開鍵の中身がバーっと表示されるので、これをまるっとコピーします。(ssh-rsa ... @email.com"
の部分)
GitHub上に鍵を登録する
次に、GitHubにアクセスし、設定画面のSSH keysを表示します。
すると、以下のようなフォームがあるので、Key
には先ほどコピーした内容をペースト。Title
にはその鍵の環境名などを入力すると複数環境がある場合だと区別しやすくなります。
Add SSH key
で登録します。
SSH接続ができるか確認する
$ ssh -T git@github.com
すると以下のように聞かれるので、yes
でエンター。
The authenticity of host 'github.com (192.30.253.112)' can't be established. RSA key fingerprint is 16:27:ac:a5:4d:eb:df:a6:48. Are you sure you want to continue connecting (yes/no)? yes
Hi!と返ってきたら成功です。
Hi Konnobu! You've successfully authenticated, but GitHub does not provide shell access.
お疲れ様でした!
参考
Macでrmagickのbundle installに失敗したときの対処
エラー内容
Installing rmagick 2.15.4 with native extensions Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /Users/azunobu/.rbenv/***/rmagick-2.15.4/ext/RMagick /Users/azunobu/.rbenv/versions/2.3.0/bin/ruby -r ./siteconf20160704-56813-17nbb4t.rb extconf.rb checking for clang... yes checking for Magick-config... no checking for pkg-config... yes Package MagickCore was not found in the pkg-config search path. Perhaps you should add the directory containing `MagickCore.pc' to the PKG_CONFIG_PATH environment variable No package 'MagickCore' found checking for outdated ImageMagick version (<= 6.4.9)... *** 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. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/Users/azunobu/.rbenv/versions/2.3.0/bin/$(RUBY_BASE_NAME) To see why this extension failed to compile, please check the mkmf.log which can be found here: /Users/azunobu/.rbenv/***/rmagick-2.15.4/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /Users/azunobu/.rbenv/***/gems/rmagick-2.15.4 for inspection. Results logged to /Users/azunobu/.rbenv/***/rmagick-2.15.4/gem_make.out
解決方法
$ brew install imagemagick
$ bundle install
Bundle complete!
参考
Rails - Viewでデバッグするならdebug
Viewをいじる時のデバッグ
Rails歴1ヶ月弱、きょうViewをいじっているときに便利だ!となって嬉しくなったメソッド、debug
を備忘録で残しておきます。
使い方はすごくかんたんで、インスタンス変数であれば
<%= debug @item %>
これだけで、変数値やパラメータ値が見やすく表示することができます。
また、開発中のみデバッグの値を表示したいといった場合は
<%= debug @item if Rails.env.development? %>
と 後置ifを使います。
参考
Rails - link_toでブロックを囲む
リストの要素全体をaタグで囲みたいパターン
リスト一つ一つのブロックをaタグで囲んでクリッカブルにしたい場合はよくある。下のような感じ。
<a href="url"> <div class="content"> <div class="inner-left"> ... </div> <div class="inner-right"> ... </div> </div> </a>
link_toメソッド
結論から言うと、カッコつき link_to の後ろに do をつけて、 閉じ end で、ブロックを囲める。
<%= link_to(item_path(item), class: 'list-content') do %> <div class="content"> <div class="inner-left"> ... </div> <div class="inner-right"> ... </div> </div> <% end %>
参考
Ruby - メソッドの種類
Rubyのメソッドの種類
主に大きく分けて、レシーバによって、3種類に分けることができる。
レシーバとは
ちなみに、レシーバ(receiver)というのは、以下のメソッドを呼び出す構文のオブジェクトを指す。
オブジェクト.メソッド名(引数1, 引数2, …, 引数n)
なぜかというと、オブジェクト指向の考え方として、メソッドを実行することをオブジェクトにメッセージを送る、その処理結果として、オブジェクトはメッセージを受け取る(receiveする)と考えるから。
インスタンスメソッド
メソッドの種類として最もメジャーなもの、インスタンスメソッド。オブジェクト(インスタンス)自身がレシーバとなる。クラスの中にメソッドを定義した場合、基本的にインスタンスメソッドとなる。
p "maguro,100,2016-4-14".split(",") #=> ["maguro", "100", "2016-4-14"] p ['sushiro', 'kappazushi', 'hamazushi'].index('sushiro') #=> 0 p 100.to_s #=> "100"
上の文字列、配列、数値がそれぞれレシーバになっている。そのオブジェクトが持っているインスタンスメソッドは各オブジェクトクラスによって処理が書かれている。
クラスメソッド
レシーバがインスタンスではなく、クラスそのものであった場合、それはクラスメソッドという。主にインスタンスを生成する際によく使われる。
Array.new # 新しい配列を生成 Array["maguro", "salmon", "ikura"] # 要素を持った配列を生成
クラスメソッドの呼び出し方には二通りがあって、.(ドット)
と::(ダブルコロン)
で、どちらも意味。
クラス名.メソッド名 クラス名::メソッド名
同じ意味ではあるが、定数アクセスにも::
を使用するため、メソッド名が大文字から始まっている場合、それは定数としてみなされかねない。
そのため、メソッド名には全て小文字で命名することを留意した上で、明示的にメソッドであることを示す場合はクラス名::メソッド名()
というようにメソッド名の後ろに()
を付加する。
関数的メソッド
最後に、レシーバがない関数的メソッドがある。ない、というと語弊があって、正確には省略されているだけ。 これらの関数的メソッドは全てのクラスからアクセス可能な、Kernelモジュールに備わっている。
例として
puts "sushi" # sushiを出力する sleep(5) # 指定された秒数分, 処理を中断する
上に示したような関数メソッドは、レシーバの情報を必要としない。
参考
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る
Ruby - 繰り返しいろいろ
おもな繰り返し構文・メソッド
times
繰り返したい処理の回数が既に決まっている場合に使用すべきメソッド。
基本構文
繰り返し回数.times do 処理 end
また、doを省略して{}
で囲ってあげる書き方も可能。これは、eachも同じですね。
繰り返し回数.times { 処理 }
timesの処理の中で、何度目の処理かを知るためには、以下のように書けば、指定した変数に繰り返し回数が数値で参照できるようになる。
繰り返し回数.times do |変数| 処理 end
具体的に書くと、以下の様なかたち。
5.times do |i| puts "#{i}:進捗どうですか" end
0:進捗どうですか 1:進捗どうですか 2:進捗どうですか 3:進捗どうですか 4:進捗どうですか
for文
特徴的な点としては、範囲オブジェクトを使用する(in 開始時数値..終了時数値
がそれ)と開始時の数値と終了時の数値を直感的に指定できる。でもRubyでfor文ってあまりメジャーではないっぽい。
基本構文
オーソドックスなfor文
for 変数 in オブジェクト do 処理 end
doは省略できる。 オブジェクトには配列やハッシュを指定できる。
sushi = %w(まぐろ いくら たまご サーモン しめさば) for neta in sushi puts "時速120kmで#{neta}が流れてきた!" end
時速120kmでまぐろが流れてきた! 時速120kmでいくらが流れてきた! 時速120kmでたまごが流れてきた! 時速120kmでサーモンが流れてきた! 時速120kmでしめさばが流れてきた!
範囲オブジェクトを使ったfor文
for 変数 in 開始時数値..終了時数値 処理 end
例として50から100までの数値を加算するfor文を書くと以下の様なかたち。
sum = 0 for i in 50..100 sum += i end p sum #=> 3825
while文
作り方によってどのようなタイプの繰り返しでも対応できるwhile文。
基本構文
while 条件 do 処理 end
doは省略可能。 whileは他言語と同様に条件が成り立っている間はループし続ける。
i = 0 while i < 5 puts "寿司をたべた。(#{i}個目)" i += 1 end
寿司をたべた。(0個目) 寿司をたべた。(1個目) 寿司をたべた。(2個目) 寿司をたべた。(3個目) 寿司をたべた。(4個目)
iを1ずつ加算しないと大変なことになる(わりと忘れやすい)、for文で範囲オブジェクトを使ったほうが直感的でわかりやすいので、こういった場合はfor文を書いたほうが良さそうです。
until文
if文に対してunless文があるように、while文に対してuntil文がある。 until文は条件が成立するまで繰り返す。
基本構文
until 条件 do 処理 end
doは省略可能。 さきほど書いたwhile文の例をuntil文に書き直してみる。
i = 0 until i >= 5 puts "寿司をたべた。(#{i}個目)" i += 1 end
寿司をたべた。(0個目) 寿司をたべた。(1個目) 寿司をたべた。(2個目) 寿司をたべた。(3個目) 寿司をたべた。(4個目)
カウンタの処理が寿司を食べた後にあるため、iが5になった
ときは既に寿司を5つ食べていることに注意する。いっつも何回かデバッグして確認してフィーリングで合わせていくことが多いけど(ちゃんと考えよう)。
eachメソッド
azuuun-memorandum.hatenablog.com
既に記事としているため、省略。
loopメソッド
終了条件のないループ、究極までに無駄が削ぎ落とされたシンプルな繰り返しメソッド。ただそれゆえに、終了しないのでbreakしないと死ぬ。もし、繰り返しが止まらなくて涙目状態になった場合、[Ctrl] + Z
か[Ctrl] + C
で終了させることができる。
基本構文
loop do 処理 end
主に繰り返しを制御するための命令としてbreak
とnext
がある(正確にはredo
もあるが、使われない)。
- break
- 繰り返しを中断して, 繰り返しの中から抜ける
- next
- 次の回の繰り返し処理に飛ぶ
まとめ
ここで取り上げた繰り返し文やメソッドをその時々でベストなものを選択し、使うことが重要になる。
- 回数が決まっている! => times
- オブジェクトから要素を取り出して使いたい! => for, each
- 条件を自由に指定したい! => while
- こうなったら抜けろ!という条件のときに => until
- 回数制限がない! => loop
参考
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る
Ruby - 多重代入
一般に代入を行うときはa = 1
というように一つの変数に代入することがほとんどであるが、変数への代入を複数まとめて行うことも可能で、これを多重代入と呼ぶ。
基本的な多重代入
a = 1 b = 2 c = 3
以上の代入を多重代入に書き直すと、
a, b, c = 1, 2, 3
というようになる。ただ、闇雲に一行で書けて楽だ〜といって多重代入を使うよりは、変数の使いドコロが似ている(関連性のある)ものをまとめて、多重代入をすることが必要だと思われる。
いろいろな多重代入
多重代入で配列を代入したい
配列で格納したい変数名の前に*(アスタリスク)
を付けると、その変数より後ろの値が配列形式で代入される(該当する値がない場合はnilが代入される)。
a, b, *c = 1, 2, 3.0, 3.2, 3.4, 3.6, 3.8 #=> [1, 2, [3.0, 3.2, 3.4, 3.6, 3.8]]
変数の値を入れ替える
変数の入れ替えでよく使われるスニペットに
a, b = 1, 0 tmp = a a = b b = tmp
という一時退避のtmp
を使ったものがあるが、Rubyではすっきりと書ける。
a, b = 1, 0 a, b = b, a p a, b #=> [0, 1]
配列の要素を変数に落としこむ
以下のように書くと、
array = [1, 2, 3] a, b, c = array
配列の各要素を左辺の変数に落とし込んでくれる。
p a #=> 1 p b #=> 2 p c #=> 3
先頭だけ取り出したいときは、先頭を格納したい変数の後ろに,(カンマ)
を付けると、先頭要素を代入してくれる。
array = [1, 2, 3, 4, 5] a, = array p a #=> 1
複数の戻り値を返し, 受け取りたい
多重代入の使いどころの一つとして、戻り値に多重代入を利用することがある。
def calc(num1, num2) values = Array.new values.push(num1 + num2) values.push(num1 - num2) values.push(num1 * num2) values.push(num1 / num2) return values end add, sub, multi, div = calc(10, 2) puts "加算:#{add}, 減算:#{sub}, 掛算:#{multi}, 割算:#{div}"
加算:12, 減算:8, 掛算:20, 割算:5
加算, 減算, 掛算, 割算を一気に行うメソッド(これが適当かはどうか別として)があったとして、4つの計算結果を一気に戻り値として戻したい場合に配列として渡す。
受け取り側は、戻り値に対応する任意の変数で受け取ることで、複数の戻り値を受け取れている。
参考
- 作者: 高橋征義,後藤裕蔵,まつもとゆきひろ
- 出版社/メーカー: SBクリエイティブ
- 発売日: 2016/02/26
- メディア: 単行本
- この商品を含むブログ (1件) を見る