sironekotoroの日記

Perl と Mac の初心者の備忘録

Perl入学式 2017 東京 #4 と正規表現キャプチャ変数

  • 教える事で学ぶことがある、とよく言われますがこれは本当にそうで
my $words_ref = [
    'alice loves meat!',
    'bob loves sushi!',
];

このような配列のリファレンスを受け取り, リファレンスに格納された文字列について,「loves」の後に記述されている好きな食べ物の単語を正規表現で取得し,「alice -> meat」, 「bob -> sushi」のように表示するサブルーチン, love_foodを書いてみよう. https://github.com/perl-entrance-org/workshop-2017/blob/master/4th/slide.md

  • うちの解答例がこれ
use 5.012;
use warnings;

my $words_ref = [ 'alice loves meat!', 
                  'bob loves sushi!', ];

for my $line (@$words_ref) {
    if ( $line =~ /(\w+) loves (\w+)/ ) {
         say $1 , "->", $2;
    }
}
  • ここで、受講生の方から以下のようなコード書いたけど、この動作は仕様か?という質問があり
use 5.012;
use warnings;

my $words_ref = [ 'alice loves meat!',
                  'bob loves sushi!',
                  '    loves ramen' ];

for my $line (@$words_ref) {
    if ( $line =~ /(\w+) loves (\w+)/ ) {
         say $1 , "->", $2;
    }else{
        say "\$1 is " , $1; # $1 is bob
        say "\$2 is " , $2; # $2 is sushi
    }
}

  • 正規表現のキャプチャを連続して行なっている時、正規表現のキャプチャにマッチしなかった場合、キャプチャ変数 $1 , $2 の内容は、前回マッチの内容が残る?というもの

  • これ、知らなかったんですが、実際にそうらしく

キャプチャ変数が更新されるのは、マッチが成功した時だけである。マッチが失敗したら、たとえマッチの一部が成功したように見えても、キャプチャ変数の内容はそのまま残る。
Effective Perl 第2版 - Joseph N. Hall, JoshuaA.McAdams, briandfoy - Google ブックス

  • Effective Perl 第2版、持ってるんだけど全くわからなかった・・・

博多に行ってきた

あんまりPerlにもMacにも関係ない話

  • さっき、YAPC::FUKUOKA 2017 Hakata のblogをあげたんだけど、書いている途中で「これっておっさんの一人語りでノイズだわ」って思った部分だけ切り出しました

sironekotoro.hateblo.jp

6月30日 いざ博多へ

博多到着

  • 冬に行った新千歳でも工事中だったし、やっぱ2020年のオリンピックに向けて全国の空港で整備が進んでるのかな
  • この時点で朝の8時だったので、空港の売店から実家方面にお土産発送

blog.yapcjapan.org

  • YAPCにロゴの利用を許諾して下さったという「にわかせんぺい」さんと、定番「博多通りもん」を中心に組み立て。あと、イチゴのブランド「あまおう」を使ったお菓子など

博多散策

  • JR博多駅近くのホテルに荷物を預け、日本最高の公園である大濠公園へ歩いて行ってみる
    • いつもは博多の友達と一緒だったので地下鉄使ってたけど、一度歩いて行ってみたかった
    • 国体道路」なる太い道を1時間半くらいで到着。

  • 帰り道(歩き)、前夜祭の会場となるヌーラボさん横のお寿司屋さんでお昼を食べる。

nulab-inc.com

  • ここで川の上にぶら下がってたバイク、落ちちゃったのかな

  • いったんホテル戻ってシャワー浴びようとしてビックリした

7月2日 陥没事故現場

  • ホテルからJR博多駅に行く時に陥没事故の現場を通る
  • 愛媛銀行前だったんですぐわかった

www.youtube.com

柳川へ

  • 博多には結構な回数いってて、博多市内の観光名所はだいたい見て回っていたので、YAPCのblogを参考に柳川へ

blog.yapcjapan.org

  • 柳川までは西鉄天神駅から特急で1時間ちょっと
  • 途中、チェッカーズの出身地として有名な久留米の街を経由。結構大きな街だった
    • 平成も30年になろうかというこのご時世、チェッカーズとか知らない人多そうだよなぁ

www.youtube.com

  • 柳川は水郷、水の都といった趣。
  • お腹が空いていたので、柳川駅からバスで旧柳川藩主邸の「御花」へ

www.ohana.co.jp

  • 柳川名物「うなぎのセイロ蒸し」をキメました

    ・関東:背開き→切る→串にさす→蒸す→蒲焼(タレ焼き)
    ・関西:腹開き→素焼き→蒲焼(タレ焼き)
    ・柳川:背開き→素焼き→蒲焼(タレ焼き)

  • どっち開きかはわからないんですが、おいしかったわ〜
  • 一食3000円超えるとか、普段の暮らしでは理性ブレーキが効いて無理だけど、それが取っ払われる旅行だからこその贅沢
  • 食べた後、川下りして柳川駅へ・・・と思ってたら、どうも駅行きは団体参加貸切しかない模様!!!
  • Q.でも川下りはしたい!どうする!
  • A.一度駅に戻って川下り
    • なお、完全に無駄だったかというとそういうことはなく、御花近くの柳川城跡などを見たりしたのでした
    • 盛り土と石垣だけだったけど、堀の近くにあって水城って雰囲気はあった
  • 柳川城跡近くで運良くタクシーを拾い、船着き場まで
    • 炎天下だったので、幸運だった
  • そこから、川下り開始。目的地は御花。さっきまでそこいたよ!
  • なお、同乗のお客さんは台湾と韓国の方々
    • インバウンドすごい
    • 博多もインバウンドの方が本当に多かった
    • どういう紹介のされ方してこの柳川にいるんだろう?Japanese traditional old waterfront city とか?
  • 船頭さんはご年配の男性の方でしたが、橋をくぐる時には中国語とハングルで「頭を下げて」と言っておりました
    • 女性の船頭さんもいるとのこと
  • 昔は「川下りなんて年寄りな・・・」って思ってたけど、川から見上げる街の様子なんかが楽しくて、俺も年取ったなーってことに気づきました
  • 川下りでせっかく御花に戻ったので、お土産品とか見てたけど、「さげもん」なる雛飾りが綺麗でした

さげもん - Wikipedia

焼き鳥(豚バラ

  • 柳川から博多に戻り、博多祇園山笠の「飾り山」などを見つつ、予約してもらった焼き鳥屋さんへ

tabelog.com

  • なぜ博多まで来て焼き鳥?というと簡単でYAPC運営のblog見たからですね

【YAPC::Fukuoka 2017 HAKATA】福岡では豚バラは、焼鳥です。(飲み屋情報) - YAPC::Japan 運営ブログ

  • 当日付き合ってもらった博多出身の友人によると、焼き鳥屋に豚バラがあるのは「普通すぎて、おかしいと思わなかった」とのこと
  • ここで結構飲んで飲んで食べて食べて、おいしかったーってところでこの日は解散
  • 帰りに一人でシメのラーメン食べてホテルへ

さよなら博多

  • テルチェックアウトして、糸島へ

  • 悲鳴すごかった

  • レンタサイクルで玄界灘を見に行く、という計画を諦め、糸島にあるラーメン一蘭の「一蘭の森」へ
  • で、駅で無料送迎バス待ってたんだけど、ここでトラブルが

  • レスポンシブデザインでtableの要素が表示されなくなってたぽい
    • なお、今は直っております
    • 画像ベタ張りで

www.ichiran.co.jp

  • ただまー、上記のトラブルもあり、工場自体も観光というには乏しい施設で、「一蘭の森」自体は楽しめなかったなぁ
  • 無料送迎バスのおっちゃんから聞いた、糸島に九州大学が来てからめっちゃ栄えてる、バブル来てるって話が一番面白かった

  • 最後にもう一度、大濠公園を1周してスタバでドヤる

  • 松坂投手、大濠公園の近くにマンションを買ったって友達が言ってた

いつもの横浜

  • 旅行で日本全国色々言っているけど、沖縄はまだ足を踏み入れたことがないので楽しみ〜

  • YAPCの運営ブログに頼るだけで素敵旅行ができるのすごい

    • 今回ひどい目にあった「一蘭の森」は紹介されていなくて、ほんと凄い

YAPC::Fukuoka 2017 HAKATA

いざ博多へ

全然野菜

  • GMOペパボさんで開催の非公式イベント
  • 「全然野菜」ってのは「前前夜祭」を変換するとこうなるってことで
  • 「前」前夜祭ってことですが、前夜祭の直前に実施
  • 前前夜祭でおおって思ったのは「OCTOPASS」
    • tomohisaoda.com
    • システムの「使いまわせるところ」を切り出して、外に出して、しかもサーバの運用はお任せしていくっての、プログラミングだよなぁって

前夜祭

    use Acme::Want5000trillion;
    my $want = Acme::Want5000trillion->new;

    print $want->say(); #5000兆円欲しい!
use Acme::SuddenlyDeath;

  print sudden_death('突然の死')."\n"
  # outputs =>
  #   _人人人人人_
  #   > 突然の死 <
  #    ̄^Y^Y^Y^Y^ ̄

YAPC::Fukuoka 2017 HAKATA 当日

    • ヘーゼルナッツラテと豆乳ラテ美味しかったです
    • まったく切れない無線LANと駅近ビル、オサレ会場、フリードリンクエリアに会社の勢いを滅茶苦茶感じる

Be PaaS Monger - クラウドエンジニアの三大美徳、またはIaaSを使わない3つの理由

  • 一番聞きたかった、わいとん(@ytnobody)さんの発表
  • スライドもMicrosoft OneDriveにおいてあるPowerPointか・・・エディタもVS Code だったし、そりゃMSの人とまちがえられるのも無理ない
  • というか、最近知恵がついてきたので、プログラム書きっぱなしってことができなくなり、自然と運用も気を使わざるを得なくなってて、ほんと書く前に運用を想像して書けなくなって死ぬことが多すぎてなんとかしたいんですよね!!!
  • まぁ、開発するよりも運用して使って行く期間の方が長いと言われるので、当然と言えば当然なんですが
  • 物事を判断するときにいろんな基準・軸があるけど、お金もその軸の一つと考えているので、共感しまくり
  • 完璧にレベル高かったです
  • わいとんさんはMSの人ではないけど、エバンジェリストってこういう仕事なのかもしれないって

ノベルティ

  • カンファレンスではいろんなノベルティが配布されるんだけど、これはすげえってのが
  • 米って
  • Perlのイベントで、パールライス、いやわかるんだが、米って
  • Pencilさん、すげぇ会社だ

未来のプログラマー達へ ~Perl入学式卒業生から~

  • speakerdeck.com
  • Perl入学式の先輩のトーク
  • ほんと、Perl入学式に一歩踏み込む、その一歩が重いというか、その最初のハードルが高いというか
    • 自分の感じ方なんですけどね
    • うちの業界だと、勉強会って企業がやってる「セミナー」しかないからってのもあるかも
  • 最後に紹介されている参考図書、全部持ってて、とても嬉しくてニヤニヤしてた

その他

YAPC::Okinawa 2018 Onnason

WEB+DB PRESS Vol.98 特集2 これからはじめるDocker(2章まで)

Docker使ってみたい!

  • そろそろDocker触っておきたいと思って購入
  • しかし、利用しているMacと環境構築に必要なVirtualBoxのバージョンが合わずに断念しかける・・・

macOSのアップグレード

  • が、これもいい機会と判断し、OSのアップグレードを敢行
  • MountainLion(10.8.5)からSierra(10.12.5)
    • Q.なぜアップグレードしなかったか?
    • A.怖かったから
  • バックアップ用に外付けHDDをあけ、macOSのOS領域ごとバックアップ
  • 同様に、TimeMachineでもバックアップ
  • 上書きアップグレード・・・成功!
  • 思ったよりうまくいった。対応していないソフトがいくつかあったけど、入れ直しでok

    • ただし、KeyRemap4MacBook改めkarabinerはSierraに対応しておらず、利用不可。
    • あと、Parrallelsもver9だったので、Sierraで起動できず
      • ただ、この4年間でParallelsWindows起動して使ったのって環境構築の時だけだからいらないかも・・・
        • bootcampからはWindowsをが利用可能
    • AutoChargeInhibitは動いたり動かなかったり。惜しい。
            - [AutoChargeInhibit - MacBook Pro 15 early 2011のバッテリーの充電をソフトウェア制御でオン・オフして充電を少し抑制する](http://memogakisouko.appspot.com/AutoChargeInhibit.html)
      
  • 一番懸念していたSublimeText2やPerl、nodeの環境は維持されていて、これは本当に良かった。

  • GW中に買って勉強した「わかばちゃんと学ぶ Git使い方入門」で勉強した時にSourceTreeが入れられず、旧バージョンでしのいでいたのもこれで解決
    • なお、SourceTree旧バージョンはWeb上での利用登録が必要
    • しかし、Web上では利用登録ができず
    • 試用期間1ヶ月が過ぎると起動できなくなる・・・
    • が、Macのインターネット接続を切って日付を過去に戻すことで利用可能でした(バッドノウハウ

ソフトインストール、その前に

  • macOSのアップグレードに成功した勢いで記事にある通りにVirtualboxVagrantをインストール・・・その前に!
  • ansibleという環境構築ツールにも興味があったので、それ経由で入れてみる。
    • 本来は、今年のWWDCMacBook Airの新型かMacBook買いたくなった時のためにと思っていた
    • いちいちアプリケーションソフトをダウンロードしてインストールってのも手間に思えたので一度はやってみたいと
    • やってみたら、めっちゃ楽だった。
    • GUIのソフトもターミナルからインストールできるので本当に楽。

Web+DB PRESS vol.98 特集2 これからはじめるDocker(第1章〜2章)

  • ansible経由でVirtualboxVagrantをインストー
  • 他は記事の通りに進めていく・・・以下は詰まった所
    • 56p Vagrantfile
      • error: config.vm.provision "shell", inline: <<SHELL
      • ok: config.vm.provision "shell", inline: <<-SHELLで解消
    • 56p Vagrantで起動させたCentOS7のrootパスワードがわからず
      • パスワードはvagrant
    • 58p Vagrant上のdockerで起動させたhttpdの画面がmacOSから表示できない
      • dockerのホストであるCentOSからはcurl http://localhost:8080/で 応答があったから、いいのかな?
      • でもmacOSのブラウザから確認したい・・・

macOS上からVagrantで起動したCentOS7の中で、dockerからhttpdイメージを起動させ、そのhttpdmacOSからアクセスしたい!

とりあえずここまで

  • 第3章からはVPSでの運用の話になるので、今日はここまで。
  • 図書館にはDockerを特集したSoftwareDesignがあるんで、それを流し読みしたり

俺のリファレンス

言いたいこと

  • Perlのリファレンスは、以下のような「データをまとめたい!」って時に使うと楽になるんだよ
    • 配列の中に配列を「配列のまま」入れたい
    • 配列の中にハッシュを「ハッシュのまま」入れたい
    • ハッシュの中に配列を「配列のまま」入れたい
    • ハッシュの中にハッシュを「ハッシュのまま」入れたい
  • データをまとめると、どうお得なの?
    • 記述が楽
    • データ同士での比較が楽
  • 本当なの?という疑り深い人、2013年頃の私みたいな人は自分で配列に配列入れたり、配列にハッシュ入れたりして、自分の考えた通りのデータ構造が出来るか、そのデータ構造から要素を取り出せるか、やってみよう!
  • ・・・ってことを、昨日のPerl入学式のサポーターしながら考えたのでした。

配列に配列を入れる小芝居

use strict;
use warnings;
use Data::Dumper;

# 課題
# 「テレビ局の略称」と「チャンネル番号」を組み合わせた
# データ構造を作りたい
# あわよくば一覧表示を楽に実現したい

# まず、テレビ局のチャンネル番号と略称名の配列を作る
# 配列の最初の要素はチャンネル番号、次の要素はテレビ局名の略称と決める
# @配列 = (チャンネル番号 , 略称);
my @nhk = ( 1, 'NHK' );    # NHK総合
my @etv = ( 2, 'ETV' );    # eテレ(教育テレビ)
my @ntv = ( 4, 'NTV' );    # 日本テレビ
my @ex  = ( 5, 'EX' );     # テレビ朝日
my @tbs = ( 6, 'TBS' );    # TBS
my @tx  = ( 7, 'TX' );     # テレビ東京
my @cx  = ( 8, 'CX' );     # フジテレビ
my @mx  = ( 9, 'MX' );     # TOKYO MX

# チャンネル番号を全部表示したい・・・もしTV局が沢山あったら?
print '@nhkのチャンネル番号は:', $nhk[0], "\n";    # 1
print '@etvのチャンネル番号は:', $etv[0], "\n";    # 2
print '@ntvのチャンネル番号は:', $ntv[0], "\n";    # 4

# TV局の数だけ書いていく?
# 地方局も増えたらどうする?
# 配列名を人間が全部覚える?
# そんなの面倒!
# データをまとめておいて、forループ等でまとめて取りたい!

# チャンネルをまとめる配列を作る
my @channels;

# ----------------------
# 失敗編
# ----------------------

# チャンネルをまとめる配列に、テレビ局の配列を「そのまま」入れる
push @channels, @nhk;
push @channels, @etv;
push @channels, @ntv;

# 3つ入れてみたところで、試しにData::Dumperで中身を表示してみる
print Dumper @channels;

# $VAR1 = 1;
# $VAR2 = 'NHK';
# $VAR3 = 2;
# $VAR4 = 'ETV';
# $VAR5 = 4;
# $VAR6 = 'NTV';

# 元のTV局ごとの配列が崩れて、一つの配列になってる!?

print "@channels", "\n";    # 1 NHK 2 ETV 4 NTV
print $channels[0], "\n";   # 1
print $channels[1], "\n";   # NHK
print $channels[2], "\n";   # 2
print $channels[3], "\n";   # ETV

# それぞれの要素が何を示しているか、人間が覚えておかなくてはならない
# ・偶数の添字はチャンネル番号
# ・偶数の添字 + 1 はテレビ局名
# など。
# これは面倒では?
# チャンネル番号とテレビ局名を配列にした意味がないのでは?

# ----------------------
# 解決編
# ----------------------

# 配列をリファレンス化する
my $ref_nhk = \@nhk;
my $ref_etv = \@etv;
my $ref_ntv = \@ntv;
my $ref_ex  = \@ex;
my $ref_tbs = \@tbs;
my $ref_tx  = \@tx;
my $ref_cx  = \@cx;
my $ref_mx  = \@mx;

# ここで注目!
# さっきは「配列 @channnels」の中に「配列 @テレビ局」を入れたところ、
# 「配列 @channnels」の中で展開されてしまった。
# しかし!
# リファレンス化することで、配列を「スカラー」として扱うことが出来る!

# 「失敗編」で使った配列@channelsを初期化する
@channels = ();

# 配列@channelsにリファレンス化したテレビ局のデータを追加する
push @channels, $ref_nhk;
push @channels, $ref_etv;
push @channels, $ref_ntv;

# 3つ入れてみたところで、試しにData::Dumperで中身を表示してみる
print Dumper @channels;

# $VAR1 = [
#           1,
#           'NHK'
#         ];
# $VAR2 = [
#           2,
#           'ETV'
#         ];
# $VAR3 = [
#           4,
#           'NTV'
#         ];

# 俺が求めていたものはこれだ!
# 残りも追加していく
push @channels, $ref_ex;
push @channels, $ref_tbs;
push @channels, $ref_tx;
push @channels, $ref_cx;
push @channels, $ref_mx;

# どうなっているかな〜?
print Dumper @channels;

# $VAR1 = [
#           1,
#           'NHK'
#         ];
# $VAR2 = [
#           2,
#           'ETV'
#         ];
# $VAR3 = [
#           4,
#           'NTV'
#         ];
# $VAR1 = [
#           1,
#           'NHK'
#         ];
# $VAR2 = [
#           2,
#           'ETV'
#         ];
# $VAR3 = [
#           4,
#           'NTV'
#         ];
# $VAR4 = [
#           5,
#           'EX'
#         ];
# $VAR5 = [
#           6,
#           'TBS'
#         ];
# $VAR6 = [
#           7,
#           'TX'
#         ];
# $VAR7 = [
#           8,
#           'CX'
#         ];
# $VAR8 = [
#           9,
#           'MX'
#         ];

# ちゃんと全部、チャンネル番号とテレビ局名の組み合わせが入ってる!

# さて、データを取り出してみる
# 配列@channelsは配列なので、データの順番が保証されている
# 最初に入れたNHKの配列を取り出してみる

print $channels[0], "\n";
# ARRAY(0x************) 配列リファレンスであることを示す表示

# 配列リファレンスから、元の配列に戻す「デリファレンス」を行う
print @{ $channels[0] }, "\n";    # 1NHK
# 配列をそのままprintしたので要素が繋がって表示されている

# 中身は取得できたようなので、配列の要素ごとに取り出してみる
# 配列の要素はスカラーなので、$でアクセスする
print ${ $channels[0] }[0], "\n";    # 1
print ${ $channels[0] }[1], "\n";    # NHK

# アロー記法を使うとスマート表記が可能
print $channels[3]->[0], "\n";       # 5
print $channels[3]->[1], "\n";       # EX


# データ構造を構築できたところで、一気に表示してみる

# @channelsの中身は、解決編冒頭で作成した、配列リファレンスの集合で
# あることを忘れない
foreach my $array_ref ( @channels ) {
    # 配列リファレンスの最初の要素はチャンネル番号
    print "チャンネル番号は:" , $array_ref->[0], "\n";
    # 配列リファレンスの二番目の要素はテレビ局の略称
    print "テレビ局の略称は:" , $array_ref->[1], "\n";
};

# チャンネル番号は:1
# テレビ局の略称は:NHK
# チャンネル番号は:2
# テレビ局の略称は:ETV
# チャンネル番号は:4
# テレビ局の略称は:NTV
# チャンネル番号は:5
# テレビ局の略称は:EX
# チャンネル番号は:6
# テレビ局の略称は:TBS
# チャンネル番号は:7
# テレビ局の略称は:TX
# チャンネル番号は:8
# テレビ局の略称は:CX
# チャンネル番号は:9
# テレビ局の略称は:MX


# もし、最初に作ったテレビ局の配列から上記のような出力を得ようとした場合には・・・
print "チャンネル番号は:" , $nhk[0] , "\n";
print "テレビ局の略称は:" , $nhk[1] , "\n";
print "チャンネル番号は:" , $etv[0] , "\n";
print "テレビ局の略称は:" , $etv[1] , "\n";
# ・・・と、テレビ局の配列の数 * 2 記述する必要があり大変。
# 配列名を間違えたり、抜けがないように人間が気をつける必要がある。
# これは「楽」ではない
# でもまぁ、書けなくはない。大変だけど。

わかばちゃんと学ぶGit使い方入門 SECTION 21 〜 SECTION 30

昨日に引き続きやっていく

  • 光陰矢の如し、GWもあっという間に残り6日に
  • 6日もある!ひゃっはー!

CHAPTER 4

SECTION 21

  • リモート追跡ブランチ。なんか、origin/masterってのが出ていたのは気づいてた
    • まぁ、普通は気づく
  • pullはfetchとmarge、2つの機能を合わせたもの
    • fetch:リモートブランチから(ローカルにある)リモート追跡ブランチを同期
    • marge:リモート追跡ブランチとローカルブランチを同期

SECTION 22

  • fetchしてmargeする。ふむふむ
  • 自分の手元にあるブランチの流れと、本に載っている画面の流れが違うと不安になるなぁ・・・

SECTION 23

  • リモートブランチの削除とローカルブランチの削除、一緒に出来ないのかな?

SECTION 24

  • コミットメッセージは、push前だったら修正可能と。
  • pushした後には修正は出来ない・・・?

SECTION 25

  • スタッシュ
  • 変更するファイルをステージング環境に置いておかないと、スタッシュのボタンが有効化されなかった

SECTION 26

  • チェリーピック!

    別なブランチから特定のコミットのみを取り込みたい

  • 昨日、間違えて別なブランチにコミットしてしまった俺に必要だったもの・・・
  • チェリーピックは特定のコミットを、今いるブランチにコピーしてくるだけ。移動ではない
  • 不要になったコミットは、リバートで打ち消す
  • チェリーピックとリバート、一緒に出来れば便利なのでは・・・?

SECTION 27

  • タグを付けることで、履歴上の重要な(と自分が判断した)ポイントに目印をつけることが出来る

SECTION 28

  • detached HEAD、よく分からん・・・
  • でも、SourceTreeが警告出してくれるから、警告に従っていれば大丈夫そう

SECTION 29

  • GitHub Pages 、静的なWebページ公開サービス
  • コードの解説とか、ヘルプページ的なものとか・・・?

SECTION 30

  • 変更履歴が統一したフォーマットで整理されるのはとても良いのでは
  • 「何でもかんでもGitで管理しようおじさん」が出てくるのも分かる
    • Excelシートとか・・・
      • これが「おじさん化」か・・・
    • しかし、なんでこういう場合は「おじさん」なのだろう・・・
  • まぁ、コラボレーションはまだ怖いかな・・・
    • 誤字脱字の修正くらいなら・・・

この本を読み終えて

  • つまづきポイントの先回りは良かった
    • もちろん、個々人でつまづきポイントは違うんだけど、割とカバーされていた方では?と思う
    • うちのつまづきポイント:別なブランチにコミットしてあわあわする
  • 自分のローカルの状態と、本に載っている画面が違うと「どこかで間違えた?」ってなって怖い
  • かといって、全部載せていたら本の内容は1.5倍になり、しかし中身が薄めになっていたかもしれない
  • この本を基礎の基礎、土台、地殻にして、他のGit初心者本に進むとよさそう、というか進む予定
    • やっぱり本の内容とローカルの状態が合わなくなって放り出した「アリスとボブ」本かな
  • あとは、GitHub使わなくても個人プロジェクトでGitを使っていく気になれた
    • フォルダが file_20170502.pl とか file20170502.pl とか _old_file とかで埋まる状況は回避できそう
  • 読んで良かった!

わかばちゃんと学ぶGit使い方入門 SECTION 01 〜 SECTION 20

2017年ゴールデンウィークの課題図書

  • Git習得には一度挫折。
  • せっかく9連休をとることが出来たので、一念発起して選んだのがこの本。

なぜ「わかばちゃんと学ぶGit使い方入門」を選んだのか?

CHAPTER 1

SECTION 01

  • だいたい把握

    SECTION 02

  • SourceTree 入れたことがある
  • しかし、自己流でやってみて、よく分からんってことでアンインストールした覚えがある

CHAPTER 2

SECTION 03

  • SourceTreeのインストール
  • 「お前のOS古すぎて入れられんわ」エラー
    • 宗教上の理由で未だ買った時の Mountain Lion
      • 初めてかつ唯一の MacOS X で、OSアップデートの経験がなくて怖い
  • まぁ、覚悟はしてた
  • 旧バージョンをダウンロード

SECTION 04

  • リポジトリ・・・プロググラムとかバージョン管理やってないと触れること無い単語だよな
  • サンプルフォルダを作って、選択して・・・エラー!

    git -c diff.mnemonicprefix=false -c core.quotepath=false -c credential.helper=sourcetree init /Users/sironekotoro/Dropbox/git_study/wakaba/sample dyld: lazy symbol binding failed: Symbol not found: strlcpy_chk Referenced from: /Applications/SourceTree.app/Contents/Resources/git_local/bin/git Expected in: /usr/lib/libSystem.B.dylib
    dyld: Symbol not found:
    strlcpy_chk Referenced from: /Applications/SourceTree.app/Contents/Resources/git_local/bin/git Expected in: /usr/lib/libSystem.B.dylib
    Completed with errors, see above

  • ふむ、わからん。

  • もちろんググる大先生に聞く
  • osx - git command-line on Mac OS error “dyld: Symbol not found: ___strlcpy_chk” - Stack Overflow
  • Xcode から Command Line Tool をインストールしてみる
    • Xcode 起動 -> Command + , -> Command Line Tools をインストール
    • ダメ・・・
  • うーん、うーん、と色々やっているうちに、このMacには複数のGitがインストールされていることが判明
  • SourceTreeの環境設定 -> Git で確認すると、
    • 内蔵Gitのバージョン;2.6.2
      • エラー消えない
    • システムGitのバージョン:2.0.1
      • エラー消えない
    • Terminalから git –version で確認:2.5.1
      • さらにTerminalから which git で確認すると /usr/local/bin/git
  • 3種のGit盛り合わせかよ・・・わけわかんねぇ
  • が、とりあえず、SourceTreeの環境設定 -> Git から「システムのGitを使用する」をクリックし、そこで /usr/local/bin/git のGit(2.5.1)を選択
  • ok!

閑話休題

  • ほんと、個々人の環境なんて千差万別だから、万人が動かせるような環境・導入方法案内なんてなかなか無いよな・・・
  • VirtualBoxvhd配るとか・・・?

Section 05

  • エラーは出なくなったが、さすがに 2.0.5.2 と現行バージョンの 2.5 は表示が若干違う。
    • が、表示オプションで本に載っているのと同じレイアウトにすることは可能
  • しかしまぁ、同じことをするツールなので、なんとか頭で違いを吸収しつつこのまま学ぶ
  • すんなり進む

SECTION 06

  • リポジトリ内のテキストファイルをチェックアウトして、過去の履歴にさかのぼる
  • この辺りは、コマンドラインのgitでやった覚えがある
  • チェックアウトしたときに、テキストエディタ内の内容が変わるのが、ちょっと面白かった

SECTION 07

  • GitHubのアカウントは作成済
  • だが、使ってない・・・

SECTION 08

  • GitHubにある、この本の練習用リポジトリからフォーク
    • たぶん初フォーク
    • うちがフォークした時点で27

SECTION 09

  • ブランチについて
  • ブランチが便利というのは理解できる・・・しかし、それをまとめる時は大変なのではないだろうか?
  • ブランチごとにリポジトリの状態を保存している、って理解で良いんだろうか

SECTION 10

  • マージ!人生初マージ!

SECTION 11

  • 初プッシュ!初リモートリポジトリへのプッシュ!

SECTION 12

  • 初プル!
  • リモートリポジトリ上の変更をローカルリポジトリに反映するのがプル、ってのはわかった
  • となると。よく聞く「プルリクエスト」とは?
  • 「みんな反映してねー」とか?違う気がする・・・
  • あと、131pの「リモートリポジトリの状態」はどこから見るんだろう?
    • GitHubのファイル一覧の少し上にある「** commits」ってところから同じ画面見ることが出来た

SECTION 13

  • コンフリクトについて

コンフリクトは、同じ行に、同時に別々の修正が成されたときに発生します。 同じファイルでも、行が違えば、コンフリクトが起きずにそのままマージされるわ

  • なるほど、行単位で監視というか比較しているんね
  • ここで、update-newsをチェックアウトして、そこにmasterをブランチを統合してしまうというミスをしてしまう(逆のことをやりたかった

SECTION 14

  • プルリクエストの疑問に対する回答があった。取り込んでもらう相手の立場に立って、ということなのね。
    • 「私の更新を取り込んでくださーい」と。
    • プルリクエスト、不自然とは思わなくなってきた・・・(順応性
  • この本はなんと、プルリクエストからマージまでを体験できる!らしい!ってことで挑戦
  • うちのためしてみた時点でForkは14
  • おぉ!先人のコミットが見える!
  • しかし、自分のテキストファイルをコミット・プッシュしても、自分のGitHub上に反映していない・・・?
    • GitHubのBranchを「master」から「add-myfile」に切り替えたら確認できた
    • プッシュがされてないのかなーと、3回くらいプッシュしてた
  • 153pの「Compare & pull request」ってボタンが表示されない
    • 「compare」 と 「pull request」ってリンクならある
    • 「pull request」のリンクをクリックすることで、本と同じような画面が出た。
    • 一安心。

SECTION 15

  • うちの環境だと、 .gitignore は本に乗ってる内容で追加されてるなぁ
  • とおもったら、もともとのリポジトリに入ってた
  • なるほど、.gitignoreに記載してあるファイルはgitの管理外になるけど、.gitignoreファイル自体はgitで管理されるのね

SECTION 16

  • Bitbucket、以前にアカウント登録はしてたけど、email認証せずに放っておいてた
    • なんでそんな中途半端なところで・・・
    • 2014年の9月のことだったらしい
  • ぐうう、なんか画面が違う・・・メニューが左側にある
  • 初心者本に限らずだけど、サービス提供側のページレイアウトが変わるのは辛いものがあるが、作者さん達も避けようが無いもんなぁ
  • 画面左側メニューの「+」からリポジトリを追加。後は本に乗っているのとだいたい同じ。

SECTION 17

  • あんれ?豚玉とかソースの追加ってコミットしてたっけ・・・?
  • 例ってことで良いんかな?
  • とりあえず、「過去のコミットをチェックアウトしてブランチを分ける」ということは出来た

SECTION 18

  • リバート!そういうことだったのか!

    過去のコミット自体を削除するわけではなく、あくまでも反対の内容で新規コミットを作ることで、過去の変更を打ち消すというところがポイントです

  • 単なる削除、ではないと
  • SouceTree、Windows版とMac版でメニューの項目表示が違うの、なんか嫌だねぇ・・・
    • Windows版は「このコミットを打ち消し」
    • Mac版は「コミット適用前に戻す」

SECTION 19

  • なるほど、リベースは履歴がきれいになって良いなぁ
  • でも、慣れないうちはマージを使うってことで、しばらくは使うことなさそう

SECTION 20

  • 幾つかのコミットを1つにまとめる「スカッシュ」
  • でも、リモートリポジトリ上にあるコミットを変更すると、他のメンバーが持ってるリポジトリと差が出るので(当然だ・・・)、コミットがローカルにしかない状態で行うこと
  • この辺りは実際に試すのは自分でコミット作ってまとめたりが必要なのね
    • まぁ、それが出来るだけの知識はここまでで習っている