プログラミングスクールのフィヨルドブートキャンプでLT会を主催しました。
フィヨルドブートキャンプって?
プログラマーとして就職を目指せるだけのスキルを身につけることを目標としたオンラインプログラミングスクールです。就職を目指せるスキルを弊社では「現場の人間にとって、戦力になるプログラマー」としています。具体的には、一人でWebサービスを作ることをゴールとした課題をやるのですが、それだけでなくチーム開発も経験できます。 (引用元: https://bootcamp.fjord.jp/)
下記は詳しい情報です。
フィヨルドブートキャンプと私の関係と少し自己紹介
Webサービスを作りたくて独学で勉強してました。(Progateやドットインストール等)
途中で、プログラミングを仕事にしたいと思い上京。体系的に学べるフィヨルドブートキャンプで3月からお世話になってます。
趣味は硬式テニスで、社会人になってからはじめました。テニススクールの中での大会で少し優勝経験を積んで、調子に乗って外での大会で参加したらボロボロでした😅テニスももっと上手くなりたいと思っています!
将来はどんなに年をとってもプログラミングでWebサービスを携わる仕事をしたいと思います!またテニスもどんなに年をとっても優勝を狙いに行きたいです!(笑)
LTとは?
LTとはLightning Talks(ライトニングトーク)の略です。"Lightning"は英語で"稲妻"という意味。つまり、直訳すると"稲妻トーク"なのです。...まだ何を言っているかわからない?いいでしょう。
"稲妻トーク"の名の通り、LTはいわば「短いプレゼンテーション」のことです。勉強会やイベント、カンファレンスなどで行われる5分程度の短いプレゼンテーションなんかは、LTです。
引用元: IT業界でよく聞く「LT」ってなんなの?3つのメリットを知って、きみもLTしてみよう! | トビラシステムズ株式会社
今回のLT会の主催する事になった経緯
前回の主催者である高橋航平さんがフィヨルドブートキャンプを卒業して、ご就職される事で今回は私がLT会の主催をさせていただきました。
高橋航平さんのブログ
オンラインでLT会をしました。オンラインで使用するビデオチャットツールはRemoをつかいました。(ビデオチャットツールについては今度、ブログに書こうかなと考え中です) 前回のLT会で、テーマを絞った方が、発表する人も広いテーマをから何を発表するか考える事より作りやすくなり、聞く側も範囲を絞ったほうが理解が深まりやすいとという意見があり、今回は「RubyやRubyに関連する事」というテーマを設けることになりました。またテーマを「RubyやRubyに関連する事」にする事で、フィヨルドブートキャンプ外のRubyの勉強会の参加や、登壇のきっかけになればいいなと思ってLT会を開催しました。
Remoのリンク Remo: Live Video Conversations Now Simplified - Remote collaboration has never been so simple.
伊藤淳一さんについて
「プロを目指す人のためのRuby入門」の著者である伊藤淳一さんもゲストとして参加してくれました。
(現在はフィヨルドブートキャンプのメンターをしていただいてます)
伊藤淳一さんについては下記のリンクを貼ります。
登壇者の方のスライド
@yoshihiroUeki
私のスライドです テーマ「プロを目指す人のためのRuby入門を学んでつまずいたところ」
@sasabo さん
テーマ「Rubyはなぜ楽しいのか?〜Cと比較してみよう〜」
CとRubyの違いについてわかりやすいスライドでした!また、RubyがC言語で書かれている事や、いかに、Rubyが直感で書きやすいかを説明されて理解できました。
@masuyama13 さん
テーマ 「Ruby クラスは「製造機」」 Rubyのクラスについて、製造機という例えやインスタンスについては材料という例えがわからりやすかったです!私もクラスについての理解がまだまだの所があって、今回のスライドで理解が深まりました!
@masuyama13 さんのブログ
@gogutan さん
テーマ 「初学者でも遊べる!Rubyで競技プログラミング」 競技プログラミングは初学者では難しいのかなと思っていましたが、今回の発表を聞いて初学者でも挑戦していいんだと思いました!また、競技プログラミングで学べる事と学ぶ事が難しい事やメリットとデメリットを比較されていて競技プログラミングを検討されている方も背中を押せるスライドだと思いました!
参加者の方の声
良かった点
全体的に良かったと思います。休憩も適度で良かったです。発表者の皆様のプレゼンも見やすく分かりやすく参考になりました。発表ごとに質問タイムを入れていただいたのも嬉しかったです(個々のテーブルに分かれると質問が共有できなくなってしまうため)。ディスカッションタイムも楽しかったです。
私も休憩(ブレイクタイム)を設けて良かったと思いました😊Remoならではのテーブルに別れてディスカッションも良かったと思いました!
"LTをすることは、発表者にとってとても良いアウトプットだと思うので、この機会を設けることを続けていってほしいです。 前回と比べてRemeやGoogleフォームが導入されたりと、より良い仕組みができつつあると思います。"
今回は色々と新たな試みをしてみたのですが、そう言ってくださりありがたいです😊
改善点
"①プレゼン時のチャットのコメントを、Remoに書くべきか、Slackに書くべきか、どちらかの方が良かったのかなと思いました。個人的にはにぎやかしのRemoのチャットも、後々振り返りたい時のために、あと参加できなかった人のために、slackの方がいいのかなと思いました。いろいろリンクも貼っていただいた方もいらっしゃったので残しておきたいなと思いました。 ②Remoに15時ぴったりにしか入室できなかったので、はじめのチュートリアルのようなもので手間取ってしまいました。5分前くらいから入室できるようにしてもらえるとありがたいなと感じました。"
チャットのコメントをどちらかにすれば良かった反省してます!後で振り返りするためにslackだけにしようと思いました⭐️
また、5分前に入れるかメンターの方に相談すれば良かったと思いました!またメンターの方にRemoについて色々と質問すれば良かったと思いました。
"発表者の方が発表されるとき、○○さんがステージから降りられて、相槌する人がいなかったと思うので、発表者の方が孤独に感じられたかもしれないのが気になりました(私は聞いている側だったので、想像でしかありませんが・・・)。 また、質問意見交換タイムで少し何を話せばという空気になってしまいました。"
確かに、発表しているときに相槌があった方が発表しやすいと思いました!質問意見交換タイムでは、事前にどんな質問がいいかテンプレート等を用意すれば良かったと思いました!
全体の感想
全体的に良かったと思います。休憩も適度で良かったです。発表者の皆様のプレゼンも見やすく分かりやすく参考になりました。発表ごとに質問タイムを入れていただいたのも嬉しかったです(個々のテーブルに分かれると質問が共有できなくなってしまうため)。ディスカッションタイムも楽しかったです。
おお!!嬉しいお言葉ありがとうございます😊
"LTをすることは、発表者にとってとても良いアウトプットだと思うので、この機会を設けることを続けていってほしいです。 前回と比べてRemeやGoogleフォームが導入されたりと、より良い仕組みができつつあると思います。"
LT会を主催させていただきありがとうございました!また、このLT会の流れが続ければいいなと思いました。新しい仕組みも評価していただいて嬉しいです⭐️
最後に
LT会を主催するにあたって、LT会の告知の文章を見てくれて、また場を提供してくれたフィヨルドブートキャンプの町田さん、駒形さんありがとうございます!また、主催を勧めてくれた、高橋さんありがとうございました! 伊藤淳一さんにも参加していただき今回のLT会の良かった事や改善点、また私が発表したスライドについてのフィードバックをいただき、たくさん学べました。ありがとうございます! 登壇者の方ありがとうございます。色々と私が準備であたふたしていた時、手伝ってくれて感謝です! 参加者の皆さんありがとうございます。今回のLT会で楽しんで参加してくれて、またフィードバックくれて次回のLT会の参考にさせていただきます!
ブログかきました。
— yoshihiroUeki (@yoshihiroUeki) 2020年6月28日
プログラミングスクールのフィヨルドブートキャンプでLT会を主催しました。 - uetennis’s diary https://t.co/g55VD6y4z3 #fjordbootcamp #プログラミング #はてなブログ
Rubyの3項演算子からif文に書き換えるのに苦労してしまった。。
やったこと
Rubyの3項演算子からif文に書き換える。
(単純な事に気づかずに苦労してしまった💦今思うとなぜ気づかなかったのだろう。。)
プロを目指す人のためのRuby入門の第4章の4.3.4
の偶数のみ値を10倍にしてから加算する3項演算子を使ったコードがあります。
(3項演算子の詳しい説明は本書に記載されています。こちらは「プロを目指す人のためのRuby入門」の第4章の4.3.4
のコードを引用させていただきました。)
numbers = [1, 2, 3, 4] sum = 0 numbers.each do |n| #3項演算子 sum_value = n.even? ? n * 10 : n sum += sum_value end p sum #=> 64
- ↑のコードをif文に変更しようとしました。
- 下がif文に書き換えようとした失敗例です。
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum_value2 = if n2.even? n2 * 10 else n2 sum2 += sum_value2 end p sum2
end
が1つ足りないと気付き、付け足す。
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum_value2 = if n2.even? n2 * 10 else n2 sum2 += sum_value2 end end p sum2
else
の中でsum2 += sum_value2
を記述するのがおかしいと気づかないのが、今思うと恥ずかしい。その他に原因があると思って色々と変更しては改善されずに嵌った。
わかったこと
- 下記の順にコードを改善しました。
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum_value2 = if n2.even? n2 * 10 else n2 end sum2 += sum_value2 end p sum2 #=> 64
numbers2 = [1, 2, 3, 4] sum2 = 0 numbers2.each do |n2| sum2 += if n2.even? n2 * 10 else n2 end end p sum2 #=> 64
- 誤りに気づくのに時間がかかり過ぎたので同じ事が起きないようにブログに書いて振り返りをしようと思いました。
参考
スラスラ読めるRubyふりがなプログラミングを読んだ感想
はじめに
- スラスラ読める Rubyふりがなプログラミングは非常にわかりやすく書かれていて、プログラミングをまったく触った事ない人やプログラミングを一度挫折した人に勧めたいと思いました!
目次
背景
- Rubyをまったく触った事がなく、プログラミングもよくわからなかったので、本書を読みました。
著者・監修者プロフィール
著者:リブロワークス
書籍・雑誌を中心とした出版物の企画、編集、執筆、デザイン、組版を行っているプロダクション
プログラミングをわかりやすく解説している本が多いです。 リブロワークスのWebサイト
監修者:高橋 征義
札幌出身。Web制作会社にてプログラマとして勤務する傍ら、2004年にRubyの開発者と利用者を支援する団体、日本Rubyの会>を設立、現在まで代表を務める。 2010年にITエンジニア向けの技術系電子書籍の制作と販売を行う株式会社達人出版会を設>立、現代表取締役。 好きな作家は新井素子。
高橋メソッドというプレゼンテーション技法を考案しています。また著書に「たのしいRuby」(共著)などがあります。 高橋メソッド(たかはしメソッド)とは、日本Rubyの会の高橋征義によって考案されたプレゼンテーション技法。
スラスラ読める Rubyふりがなプログラミング
本書の章立て
- Chapter1 Ruby最初の一歩
- Chapter2 条件によって分かれる文を学ぼう
- Chapter3 繰り返し文を学ぼう
- Chapter4 クラスとメソッドの作り方を学ぼう
- Chapter5 Ruby on Railsを体験しよう
考察・感想
Chapter1 Ruby最初の一歩
- すべての章にいえる事ですが、ルビがふられているので理解の助けになります。
- プログラム内に
メソッド名 + 引数
と書くとメソッドそれぞれに割り当てた仕事をするという説明の仕方は図と会話形式でわかりやすかったです。
Chapter2 条件によって分かれる文を学ぼう
- if文やcase文について学べます。個人的には!演算子についての使い所を解説されていて勉強になりました。
Chapter3 繰り返し文を学ぼう
- each do というメソッドを使って九九を使ったり、総当たり戦を作ります。総当たり戦の組み合わせ文を作るときに同じ対戦相手に除く為にshiftとeach doを使って先頭を取り出しながら繰り返し処理するのはのは勉強になりました。
総当たり戦の対戦相手がA VS A
被る!!またA VS B
とB VS A
という同じ組み合わせになってしまうコード
team1 = %W(A B C D E F G) team2 = %W(A B C D E F G) team1.each do |x| team2.each do |i| puts "#{x} VS #{i}" end end # ~~ 出力 ~~ A VS A A VS B A VS C A VS D A VS E A VS F A VS G B VS A B VS B B VS C B VS D B VS E B VS F B VS G C VS A C VS B C VS C C VS D C VS E C VS F C VS G D VS A D VS B D VS C D VS D D VS E D VS F D VS G E VS A E VS B E VS C E VS D E VS E E VS F E VS G F VS A F VS B F VS C F VS D F VS E F VS F F VS G G VS A G VS B G VS C G VS D G VS E G VS F G VS G
総当たり戦の対戦相手をかぶらせない。
team1 = %W(A B C D E F G) team2 = %W(A B C D E F G) team1.each do |x| #B C D E F G..C D E F G..D E F G..というふうに先頭を取り出しながら繰り返し処理をする team2.shift team2.each do |i| # A A や B Bなどが当たらないようにする if x != i puts "#{x} VS #{i}" end end end # ~~ 出力 ~~ A VS B A VS C A VS D A VS E A VS F A VS G B VS C B VS D B VS E B VS F B VS G C VS D C VS E C VS F C VS G D VS E D VS F D VS G E VS F E VS G F VS G
Chapter4 クラスとメソッドの作り方を学ぼう
- メソッドの作成やクラス作成について学べます。
- attr_accessorのattrはAttributeの略で属性という意味でaccessorはアクセスするという意味で繋げると属性に「アクセスする」という意味らしい
学んだ事を元に作りました
class TennisBall attr_accessor :name, :dasu def ball_dash return (@dasu * 12).to_i end end tennis = TennisBall.new tennis.name = "YONEX" tennis.dasu = 500 puts tennis.name, tennis.ball_dash # ~~ 出力 ~~ YONEX 6000
Chapter5 Ruby on Railsを体験しよう
- webアプリについての解説やRailsについて解説されてます。
webページは静的。webアプリケーションは動的。
- HTTPの説明で、静的ページは同じリクエストを受けたら同じリクエストを返す。ストレージに入っているデータを返すだけだから。
- 動的ページはリクエストを受けるとwebサーバーと連動するプログラムがレスポンスを作って返す。・
- webサーバーとサーバーサイドプログラムとデータベースについての複雑な一連のやり取りも図をつかって説明されてわかりやすかったです。
データを登録するwebアプリに必要な機能
CRUD処理
- Create(作成)
- Read(読み取り)
- Update(更新)
- Delete(編集)
身近なアプリだとメモ帳とかTODOアプリなど!
MVCモデル
- Modelはデータを管理
- Controllerはwebサーバーからリクエストを受けて、Modelを操作してとViewに出力指示を出す
- ViewはHTMLを作りwebサーバーにレスポンスを返す RailsはMVCモデルに合わせてクラス設計されている。Railsを本格的に学ぶ前に知っておくと、取っ掛かりやすいかも!と思いました。またRailsを使ってあいさつを投稿するアプリを作る場合は本に詳しく書かれています!
まとめ
- ふりがなと読み下し文で、暗号としか思えなかったプログラミングをわかりやすく理解できるように解説されています。他の本を読んでみてわからなくなったときにふりがなをふってみると理解しやすくなります!
- Rubyは直感的でわかりやすい言語だと言われてますし、自分でも思うのですが、プログラミング初めての人は難しいと思うので本書を初めに勉強するのはおすすめだと思いました。
- 他の入門から基本書またはオンラインの動画などでつまずいた方は学習を諦めずにここから初めてみることをおすすめします。
参考
スラスラ読める Rubyふりがなプログラミング (ふりがなプログラミングシリーズ) | リブロワークス, 高橋征義 |本 | 通販 | Amazon
町田Rubyの勉強会 6/5
町田Rubyの勉強会
Ruby2.7について
- ナンバーパラメーターについて
- irbの強化
- メソッド保管やマニュアル表示ができる
- tallyメソッド便利 Ruby 2.7.0-preview1 Numbered parameters 完全攻略! - SmartHR Tech Blog サンプルコードでわかる!Ruby 2.7の主な新機能と変更点 Part 1 - 番号指定パラメータ(numbered parameter) - Qiita
Ruby 2.7 の変更点 - irb - @tmtms のメモ Ruby 2.7 で追加される `Enumerable#tally` というメソッドについて - Qiita
感想
- 今回の勉強会を通じてRuby2.7でどれだけ便利か、どれだけおいしいか知ることができたのは、個人的に得られる事が大きかったです。個人的に調べたり使って行こうと思いました!
初めてのLT登壇の感想
はじめに
「GitとGitHubの歴史人間ドラマ」の発表したので振り返ってみて良かった事を記録したかったです。また、聞く側と発表する側でどう違うの?スライド作るの大変なんじゃないか?といったLTをやる前とやった後では考えが変わったので、記録したいと思います。また、LTをやった事ない人に参考になるようにblogという形で発信したいと思いました。
目次
LTとは?
LTとはLightning Talks(ライトニングトーク)の略です。
勉強会やイベント、カンファレンスなどで行われる5分程度の短いプレゼンテーションなんかは、LTです。
もしかしたらもしかしたら登壇する時、長時間話すイメージもたれる方もいると思いますし、私もそうでした。以前、LT会でリスナーとして参加したのですが、〇〇を教えるというよりは、〇〇をやってみたや、やってみたけど解決してないので引き続きがんばります!という内容でもいいという事に衝撃を受けました。(勉強会にもよりますが、、)
IT業界でよく聞く「LT」ってなんなの?3つのメリットを知って、きみもLTしてみよう!
LT会の流れ
LT会の流れ 15:00 開始・注意事項の説明
15:10 ~ 16:30 LT発表 (1人 5分 ~ 10分・質問タイム5分)
16:30 ~ 16:55 意見交換タイム (2部屋にわかれて)
17:00 終了(KPT記入・各部屋ごとに終了)
※使ったツールはwhereby(ビジネスプラン)です(FJORD BOOT CAMPがビジネスプランを契約して下さり>ました🙇♂️)
※KPTはGoogle Docsで記入してもらうという方式を取りました(mitaka.rbでKPTをesaにみんなで記入し>ていたのが良いと思ったので)
※参加者は22名でした。
fjoldbootcampで学ばれている高橋さんに主催していただきました。オンライン開催で、誰か話しているときはみんなミュートにして聞きました!
そもそもなぜLTをする事になったのか?
fjoldbootcampの雑談部屋でLTしてみたいね〜という声があがり、登壇どうですかと、高橋航平さんが声をかけて下さり、登壇する事になりました。いつか登壇したいなーという気持ちがあったので、場を提供してくれたfjoldbootcampの皆様、高橋航平さん、色々とアドバイスしてくれた仲間に感謝です!
そもそもプレゼンした事あるの?
前職で何度か発表経験はあるのですが、テーマ選定や全体の構成を0から考えたり取り組んだりするのは初めてです!制約がなく自由度は高い分、大変な事もありましたが色々と試せる事があるので、学べる事は多かったです。
高橋メソッド
雑談部屋でLTについて話題があがり、高橋メソッドというプレゼンの手法を知りました。興味本位で使いましたが、スライド1枚に割く時間がほとんどないので、途中で話の流れで不要だと思ったスライドを思い切って捨てる事も出来ましたし、逆に情報を付け加える為に新たなスライドを作成する事も容易でした! 高橋メソッドサンプル
自分のスライド
感想・まとめ
正直な所、LTの登壇は上手くいくか不安もありましたが、仲間に相談してして高橋メソッドの事もしれましたし、「初めてやる事は上手くいかなくてもともと!やる事が大事」という励ましもあり登壇をすることの不安も軽減されました。また、機会あれば、参加していですし、発表内容も改善していきたいと思います!
参考
はじめてのLTはこんな感じ IT業界でよく聞く「LT」ってなんなの?3つのメリットを知って、きみもLTしてみよう! koheitakahashiのブログ 高橋メソッドサンプル
5/9 LTの発表しました!
5/9 LTの発表しました!
目標・やりたい事は何か?何に興味あるか?
LTの発表の準備
- 誤字脱字の修正
- GitHubのスペースの修正
わかばちゃんシリーズのgitの解説を読む
https://note.com/llminatoll/n/n0f4f7cdf6327#RQYeA
LTの発表のスライドをシェア-speakerdeck
https://speakerdeck.com/yoshihiroueki/gittogithubfalseli-shi-toren-jian-dorama
LTについてのブログを書く
日常メモ・ちょっとした事・何を感じたか?
LTの一言メモ
勉強メモ
https://speakerdeck.com/yoshihiroueki/gittogithubfalseli-shi-toren-jian-dorama
基礎知識
OSオペレーションシステムとは?
- OSは通常、ユーザーやアプリケーションプログラムとハードウェアの中間に位置
- ファイルシステムなどの補助記憶装置管理、仮想記憶などのメモリ管理、マルチタスクなどのプロセス管理などなど
- オペレーションシステムの略で、コンピュータを使う際の土台
オープンソース
- みんなで、もっともっとより良いものを作っていこうという思想
- 再配布できる
- 無料
- 中身をいじれる
Linux
- オープンソース
- 組み込みシステムとして家電、車、ゲーム、ロボット動かす事ができる。
- サーバーとして機能する。webサービス、アプリ開発
- スーパーコンピューターのOSもLinux
- windowsは使う側であり親切、Linuxは作る側であり、真面目
git
- プログラムのソースコードなどの変更履歴を記録・追跡するための分散型バージョン管理システムである。
- Linuxカーネルのソースコード管理に用いるためにリーナス・トーバルズによって開発
- BitKeeperというバージョン管理システムを用いていたが、このソフトウェアは商用ソフトウェアであった
- この状況を快く思わない人々がBitKeeperのクローンを実装したことから、この環境が使えなくなった。
- その代替として2005年にGitが開発された。
- Gitの設計はBitKeeperとMonotoneが元になっている。
- Git以前によく使われたCVSやSubversionといったバージョン管理システムでは、一つのプロジェクトの複数の参加者に対し、中央的な“リポジトリ”(repository, 保存庫)が一つだけあった。
- 一人のデベロッパがどこかを書き換えると、その変更が直接、中央的リポジトリにも及ぶ。
- Gitは分散バージョン管理システムなので、一人一人がリポジトリ全体のコピーを保有し、そのコピーに対して変更を行う。そしてその変更がOKとなったら、中央的サーバにその変更を“チェックイン”する。コードを書き換えるたびにサーバに接続しなくてもよいから、これまでよりもきめ細かい変更とその共有が、やりやすくなる。
名前の由来
- linux
- リーナス・トーバルズは、自分の作品を「freak」変わり者「free」自由「Unix」を合成して「Freax(フリークス)」と呼ぼうと思ってた。
- トーバルズの協力者であり、当時そのサーバの責任者であったレムケは、「Freax」という名前を良く思わず
- サーバ上のプロジェクトに勝手に「Linux」という名前をつけてしまった。
- 後付けで、「Linux Is Not UNIX」の略とも「Linus UNIX」の略
- git
- 「 僕は自己中心的な奴だから、自分のプロジェクトには自分にちなんだ名前を付けるようにしているんだ。最初はLinuxで、今度はGitだ。 」
- 英語のスラングとして、Gitには「バカ」「間抜け」といった類の意味がある
- “Git”という名前に対して他にもいくつかの解釈
- Global Information Tracker
開発初期の歴史
- BitKeeperの無料提供やめるのがきっかけ
- 無料で利用していた時も技術的に不満はあった
- Gitの開発は2005年4月3日に開始
- BitKeeperのクローンを作りたくないという思いがあって設計されている。リーナスは従来と同じようなアプローチを意図的にさけているから、技術的に長けたユーザーが使えるようにしている。
- 6月6日には、GitによるLinuxカーネル2.6.12のリリースが行われた
- 2005年6月26日にはプロジェクトへの主要な貢献者であった濱野純さんにメンテナンスが引き継がれた
gitの設計
- リーナスが大規模プロジェクトのメンテナンスを行った経験
- ファイルシステムのパフォーマンスに関する深い知識
- 実用性のあるシステムを短期間に作成しなければならないという差し迫った必要性
BitKeeper
- コンピュータのソースコードのバージョン管理システム(構成管理、SCMなど)の一種
- 分散開発において、各開発者の手元のローカルなリポジトリと中心のリポジトリの整合を取りつつ開発が進められる
- BitKeeperはその高い性能から、2002年から2005年にかけてLinuxカーネルのソースコード管理にも用いられた。
- ライセンス条件を巡ってOSSコミュニティとの無償提供の期限は2005年7月1日までとされ、ユーザーはそれまでに商用版への移行かバージョン管理システムを別のものにする必要が生じた。
リーナス・トーバルズ
濱野純
- 最初のリリースから2ヶ月後の2005年7月26日からGitのメンテナ
- 2005年7月26日
Git Hub
-
Git HUB
- GitHubは、Gitを用いたソフトウェア開発プロジェクトのための共有ウェブサービスの名称です。
- Gitはシステム、GitHubはGitを用いたサービス
- GitHubの最大の特徴は、ソースコードを通じて他の開発者とコミュニケーションがとれることです。
- GitHubは、2008年4月に「コラボレーションできる環境を作りたい」という夢を持った3人の想いが集まり始まったプロジェクトである
PJハイエット
- ピージェー氏がプログラミングを始めたのは14歳のときである。ピージェー氏の父がパソコンを買ったことがきっかけ
- Rubyを使ったプロジェクトやバグ、プラグインなどの情報を専門に発信するブログを立ち上げ、それが話題となりサンフランシスコのRubyコミュニティの中で名前が通る存在だった
- ピージェー氏とクリス氏は大企業で働く事に飽きた
- 「自分たちが自分たちのボスでいたい」という想いで始めたコンサルタント会社を作るが、クライアントが自分の上司になったこと感じがして嫌になった
- 彼らが望んでいた“自由”は、コンサルタント会社という形では実現不可能だと気づいた
- 2人はコンサルタントをやめ自社開発のFamSpamというサービス。
- 1つのメールアドレスに写真を送ると、メーリングリストに入っている家族に写真が届くといったもの。楽しいけどお金にならない。
- ピージェー氏はバーでお酒を飲みながらRubyについて語る会「Ruby Meetup」で3人目の共同創業者トムに出会った。
- トム氏とバーで話しているときに、「GitHub」のアイデアが生まれた
- もともとGitHubは、サイドプロジェクトとして始められたもの
- たくさんあるプロジェクトの1つとして平日の夕方以降と週末だけで進めていた。
- GitHubがなくなっては困る」と、あるユーザーから言われ、またRuby MeetupでたまたまEngine Yardの創業者と出会いパートナーシップを組んで、本格始動!
- gitのmeetupで出会ったスコットさん!創業者3人よりもgit詳しい!スカウト!
- スコットさんいわく、Git Hubはyoutubeのプログラマ版
- YouTubeを見たくてサイトを訪れるのではない。面白い動画がそこにあるから訪れる。GitHubでは面白いプロジェクトがたくさんホスティングされると拡散され、GitHubに来てもらえる。
- GitHubをローンチした当時、創業者の3人は他の仕事をすべてやめて半年間給料がないから辛かった。。
- 人を採用する際、自分たちが信頼している人からの紹介を一番大事にしている。
採用方法
- 面接に関わった人全員が投票するシステム
- 投票は「-1」「+1」「+100」の3つ
- 採用したくない場合「-1」
- 採用していいという場合は「+1」
- メンターとして責任を持って採用したいという場合「+100」
参考URL LT用
5/7 LTの準備の集中
5/7 LTの準備の集中
目標・やりたい事は何か?何に興味あるか?
LT
- 発表の情報を箇条書きでメモ
- Googleスライドの勉強
- 構成考える
日常メモ・ちょっとした事・何を感じたか?
- Vscodeの配色テーマ!ソラタイズライトは目に優しい
何を学んだか?・何がまだ理解できてないのか?
- Git commit を戻す時はオプションにきをつける。
勉強メモ
リモートリポジトリにクローンする
git clone <repository> <directory>
(m・_・bp) mbp-2 14:03 ~/Desktop/vsnote % git clone https:/xxxxxxxxxx.com/git/AAA/tutorial.git tutorial2 Cloning into 'tutorial2'... Username for 'https://xxxxxxx.com': xxxxxxx.com #メールアドレス Password for 'https://xxxxxxxxxx.xxxxxx.com': #パスワード remote: Enumerating objects: 6, done. remote: Counting objects: 100% (6/6), done. remote: Compressing objects: 100% (2/2), done. remote: Total 6 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (6/6), 617 bytes | 102.00 KiB/s, done. (m・_・bp) mbp-2 14:04 ~/Desktop/vsnote % ls tutorial2 sample.txt (m・_・bp) mbp-2 14:05 ~/Desktop/vsnote % cat tutorial2/sample.txt git is good tutorial add
クローンしたリポジトリからプッシュする
(m・_・bp) mbp-2 14:28 ~/Desktop/vsnote % cd tutorial2 (m・_・bp) mbp-2 14:30 ~/Desktop/vsnote/tutorial2 % vi sample.txt (m・_・bp) mbp-2 14:31 ~/Desktop/vsnote/tutorial2 % cat sample.txt git is good tutorial add abc (m・_・bp) mbp-2 14:31 ~/Desktop/vsnote/tutorial2 % git add sample.txt (m・_・bp) mbp-2 14:31 ~/Desktop/vsnote/tutorial2 % git commit -m "abc追加" [master 5ee0c24] abc追加 1 file changed, 1 insertion(+) (m・_・bp) mbp-2 14:32 ~/Desktop/vsnote/tutorial2 % git push Enumerating objects: 5, done. Counting objects: 100% (5/5), done. Writing objects: 100% (3/3), 285 bytes | 285.00 KiB/s, done. Total 3 (delta 0), reused 0 (delta 0), pack-reused 0 To https://uetennis.backlog.com/git/AAA/tutorial.git 3830d53..5ee0c24 master -> master
リモートリポジトリからプルする
git pull <repository> <refspec>...
(m・_・bp) mbp-2 14:42 ~/Desktop/vsnote/tutorial2 % cd (m・_・bp) mbp-2 14:42 ~ % cd tutorial (m・_・bp) mbp-2 14:42 ~/tutorial % git pull origin master remote: Enumerating objects: 5, done. remote: Counting objects: 80% (4/5) remote: Counting objects: 100% (5/5), done. remote: Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), 342 bytes | 171.00 KiB/s, done. From cccccccc.git.backlog.com:/AAA/tutorial * branch master -> FETCH_HEAD 3830d53..5ee0c24 master -> origin/master Auto-merging sample.txt CONFLICT (content): Merge conflict in sample.txt Automatic merge failed; fix conflicts and then commit the result. (m・_・bp) mbp-2 14:43 ~/tutorial % gitlog zsh: command not found: gitlog (m・_・bp) mbp-2 14:44 ~/tutorial % git log commit 39726fbf00a71b70e22aba247b2e5159fdf6a677 (HEAD -> master) Author: xxxxxxxx Date: Tue May 5 17:44:33 2020 +0900 commitの内容追加 commit 3830d532db6b0c4dfd748f98ef3adbaa9701c73f Author: xxxxxxxxxxxx Date: Tue May 5 16:16:31 2020 +0900 addの説明を追加 commit 6b32dd2d7d53ffb2b0eb7001fa37ba5842d16c39 Author: xxxxxxxxxxxx Date: Mon May 4 16:39:23 2020 +0900 <first commit> (m・_・bp) mbp-2 14:44 ~/tutorial % cat sample.txt git is good tutorial add <<<<<<< HEAD commit wow ======= abc >>>>>>> 5ee0c24ccadac0c6d7c924af19f8a1bf6c377407 (m・_・bp) mbp-2 14:44 ~/tutorial %
競合状態からプッシュ
(m・_・bp) mbp-2 15:07 ~ % cd tutorial (m・_・bp) mbp-2 14:44 ~/tutorial % cat sample.txt git is good tutorial add <<<<<<< HEAD commit wow ======= abc >>>>>>> xxxxxxxxxxxxxxxxxxxx (m・_・bp) mbp-2 14:44 ~/tutorial % # 編集する。マーカー行を削除 (m・_・bp) mbp-2 15:07 ~/tutorial % vi sample.txt (m・_・bp) mbp-2 15:14 ~/tutorial % cat sample.txt git is good tutorial add commit wow abc (m・_・bp) mbp-2 15:14 ~/tutorial % git add sample.txt (m・_・bp) mbp-2 15:15 ~/tutorial % git commit -m "マージ" [master 814f2e2] マージ #履歴の流れを表示する。` --graph`コミットの情報を一行で表示`--oneline` (m・_・bp) mbp-2 15:16 ~/tutorial % git log --graph --oneline * 814f2e2 (HEAD -> master) マージ |\ | * 5ee0c24 (origin/master) abc追加 * | 39726fb commitの内容追加 |/ * 3830d53 addの説明を追加 * 6b32dd2 <first commit>
ブランチの準備
(m・_・bp) mbp-2 15:33 ~ % mkdir nekosan (m・_・bp) mbp-2 15:33 ~ % cd nekosan (m・_・bp) mbp-2 15:33 ~/nekosan % git init Initialized empty Git repository in /Users/username/nekosan/.git/ (m・_・bp) mbp-2 15:34 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 15:36 ~/nekosan % cat nekofile.txt nekosan no git (m・_・bp) mbp-2 15:36 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 15:37 ~/nekosan % git commit -m "first commit" [master (root-commit) 852b84e] first commit 1 file changed, 1 insertion(+) create mode 100644 nekofile.txt
ブランチの作成
$ git branch <branchname>
#issue1という名前でブランチを作成 (m・_・bp) mbp-2 16:14 ~/nekosan % git branch issue1 #引数を指定せずにbranchコマンドを実行すると、ブランチの一覧を表示することができる。頭に * のついているのが現在のブランチ (m・_・bp) mbp-2 16:15 ~/nekosan % git branch issue1 * master
ブランチを切り替える
- 新しく作成したissue1ブランチにコミットを追加していくには、issue1ブランチをチェックアウトする必要がある
$ git checkout <branch>
(m・_・bp) mbp-2 16:29 ~/nekosan % git checkout issue1 Switched to branch 'issue1' (m・_・bp) mbp-2 16:29 ~/nekosan % ls nekofile.txt (m・_・bp) mbp-2 16:33 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 16:34 ~/nekosan % cat nekofile.txt nekosan no git neko add (m・_・bp) mbp-2 16:34 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 16:34 ~/nekosan % git commit -m "addの説明追加" [issue1 c7aac2d] addの説明追加 1 file changed, 1 insertion(+)
- checkoutコマンドに -b オプションを指定して実行すると、ブランチの作成とチェックアウトをまとめて行うことができる
$ git checkout -b <branch>
ブランチをマージする
- issue1ブランチに行った変更をmasterブランチに統合
- mergeコマンド
$ git merge <commit>
指定したブランチがHEADの指しているブランチに取り込まれる。
#masterブランチに移動 (m・_・bp) mbp-2 16:41 ~/nekosan % git checkout master Switched to branch 'master' (m・_・bp) mbp-2 16:41 ~/nekosan % cat nekofile.txt nekosan no git #mergeで取り込む (m・_・bp) mbp-2 16:42 ~/nekosan % git merge issue1 Updating 852b84e..c7aac2d Fast-forward nekofile.txt | 1 + 1 file changed, 1 insertion(+) (m・_・bp) mbp-2 16:43 ~/nekosan % cat nekofile.txt nekosan no git neko add
ブランチを削除する
- issue1ブランチの内容はmasterに統合されたので削除
$ git branch -d <branchname>
(m・_・bp) mbp-2 17:01 ~/nekosan % git branch issue1 * master (m・_・bp) mbp-2 17:01 ~/nekosan % git branch -d issue1 Deleted branch issue1 (was c7aac2d). (m・_・bp) mbp-2 17:02 ~/nekosan % git branch * master
並行で作業する
#issue2ブランチとissue3ブランチを作成 (m・_・bp) mbp-2 17:02 ~/nekosan % git branch issue2 (m・_・bp) mbp-2 17:11 ~/nekosan % git branch issue3 #issue2ブランチをチェックアウト (m・_・bp) mbp-2 17:11 ~/nekosan % git checkout issue2 Switched to branch 'issue2' (m・_・bp) mbp-2 17:12 ~/nekosan % git branch * issue2 issue3 master (m・_・bp) mbp-2 17:14 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 17:15 ~/nekosan % git commit -m nekofile.txt #間違え [issue2 7e4c0c4] nekofile.txt 1 file changed, 1 insertion(+) (m・_・bp) mbp-2 17:15 ~/nekosan % git commit -m "commitの説明" On branch issue2 nothing to commit, working tree clean (m・_・bp) mbp-2 17:16 ~/nekosan % git reset --hard HEAD^ #間違え HEAD is now at c7aac2d addの説明追加 (m・_・bp) mbp-2 17:17 ~/nekosan % git commit -m "commitの説明" On branch issue2 nothing to commit, working tree clean (m・_・bp) mbp-2 17:18 ~/nekosan % git reset --soft HEAD^ #直前の`git commit`の実行を取り消す (m・_・bp) mbp-2 17:18 ~/nekosan % git commit -m "commitの説明" [issue2 f4056e1] commitの説明 1 file changed, 1 insertion(+) #進めたらmergeできないから作り直し (m・_・bp) mbp-2 17:52 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 17:54 ~/nekosan % git add Nothing specified, nothing added. hint: Maybe you wanted to say 'git add .'? hint: Turn this message off by running hint: "git config advice.addEmptyPathspec false" (m・_・bp) mbp-2 17:54 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 17:54 ~/nekosan % git commit -m "commotの説明追加" [issue2 f07e6ca] commotの説明追加 1 file changed, 1 insertion(+) (m・_・bp) mbp-2 17:55 ~/nekosan % cat nekofile.txt nekosan no git neko add neko commit #issue3 (m・_・bp) mbp-2 17:20 ~/nekosan % git checkout issue3 Switched to branch 'issue3' (m・_・bp) mbp-2 17:21 ~/nekosan % cat nekofile.txt nekosan no git neko add (m・_・bp) mbp-2 17:22 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 17:22 ~/nekosan % cat nekofile.txt nekosan no git neko add neko pull (m・_・bp) mbp-2 17:22 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 17:22 ~/nekosan % git commit -m "pullの説明" [issue3 1ae506c] pullの説明 1 file changed, 1 insertion(+)
マージでの衝突を解決する...失敗
- issue2ブランチでの変更と、issue3ブランチでの変更をmasterに統合
#masterブランチをチェックアウトした後、issue2ブランチをマージ (m・_・bp) mbp-2 19:16 ~/nekosan % git checkout master Already on 'master' (m・_・bp) mbp-2 19:16 ~/nekosan % git merge issue2 Auto-merging nekofile.txt CONFLICT (content): Merge conflict in nekofile.txt Automatic merge failed; fix conflicts and then commit the result. #自動マージ失敗 #確認 (m・_・bp) mbp-2 19:20 ~/nekosan % cat nekofile.txt nekosan no git neko add <<<<<<< HEAD ======= neko commit >>>>>>> issue2 (m・_・bp) mbp-2 19:25 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 19:25 ~/nekosan % cat nekofile.txt nekosan no git neko add neko commit (m・_・bp) mbp-2 19:26 ~/nekosan % git merge issue2 error: Merging is not possible because you have unmerged files. hint: Fix them up in the work tree, and then use 'git add/rm <file>' hint: as appropriate to mark resolution and make a commit. fatal: Exiting because of an unresolved conflict. #改めてコミット (m・_・bp) mbp-2 19:26 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 19:27 ~/nekosan % git commit -m "issue2ブランチをマージ" [master 0956b72] issue2ブランチをマージ (m・_・bp) mbp-2 19:28 ~/nekosan % git merge issue2 Already up to date. #すでに最新状態 #issue3をmerge (m・_・bp) mbp-2 19:33 ~/nekosan % git merge issue3 Auto-merging nekofile.txt CONFLICT (content): Merge conflict in nekofile.txt Automatic merge failed; fix conflicts and then commit the result. (m・_・bp) mbp-2 19:33 ~/nekosan % cat nekofile.txt nekosan no git neko add <<<<<<< HEAD neko commit ======= neko pull >>>>>>> issue3 (m・_・bp) mbp-2 19:34 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 19:35 ~/nekosan % cat nekofile.txt nekosan no git neko add neko commit neko pull (m・_・bp) mbp-2 19:36 ~/nekosan % git commit -m "issue3" [master ce979da] issue3 (m・_・bp) mbp-2 19:37 ~/nekosan % git status On branch master nothing to commit, working tree clean (m・_・bp) mbp-2 19:43 ~/nekosan % git merge issue3 Already up to date.
rebaseでマージする、、、失敗
- マージを取り消す
$ git reset --hard HEAD~
#issue3ブランチをチェックアウトしてから、masterに対してrebaseを実行 (m・_・bp) mbp-2 19:58 ~/nekosan % git reset --hard HEAD~ HEAD is now at 0956b72 issue2ブランチをマージ (m・_・bp) mbp-2 20:06 ~/nekosan % git checkout issue3 Switched to branch 'issue3' (m・_・bp) mbp-2 20:08 ~/nekosan % git rebase master Auto-merging nekofile.txt CONFLICT (content): Merge conflict in nekofile.txt error: could not apply 1ae506c... pullの説明 Resolve all conflicts manually, mark them as resolved with "git add/rm <conflicted_files>", then run "git rebase --continue". You can instead skip this commit: run "git rebase --skip". To abort and get back to the state before "git rebase", run "git rebase --abort". Could not apply 1ae506c... pullの説明 (m・_・bp) mbp-2 20:10 ~/nekosan % cat nekofile.txt nekosan no git neko add <<<<<<< HEAD neko commit ======= neko pull >>>>>>> 1ae506c... pullの説明 #競合状態だから編集 (m・_・bp) mbp-2 20:12 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 20:12 ~/nekosan % cat nekofile.txt nekosan no git neko add neko commit neko pull #rebaseの場合、競合箇所を修正した後はコミットではなく、rebaseコマンドに --continue オプションを指定して実行 #もし、rebase自体を取り消す場合は --abort オプションを指定
git atatus -s
(m・_・bp) mbp-2 20:23 ~/nekosan % cat nekofile.txt nekosan no git neko add neko commit neko pull (m・_・bp) mbp-2 20:23 ~/nekosan % git rebase master fatal: It seems that there is already a rebase-merge directory, and I wonder if you are in the middle of another rebase. If that is the case, please try git rebase (--continue | --abort | --skip) If that is not the case, please rm -fr ".git/rebase-merge" and run me again. I am stopping in case you still have something valuable there. (m・_・bp) mbp-2 20:24 ~/nekosan % vi nekofile.txt (m・_・bp) mbp-2 20:25 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 20:25 ~/nekosan % git rebase --continue hint: Waiting for your editor to close the file... error: There was a problem with the editor 'vi'. Please supply the message using either -m or -F option. error: could not commit staged changes. (m・_・bp) mbp-2 20:26 ~/nekosan % git checkout master M nekofile.txt Switched to branch 'master' (m・_・bp) mbp-2 20:27 ~/nekosan % git branch issue2 issue3 * master (m・_・bp) mbp-2 20:29 ~/nekosan % git checkout M nekofile.txt (m・_・bp) mbp-2 20:30 ~/nekosan % git branch -r (m・_・bp) mbp-2 20:40 ~/nekosan % git branch -r - fatal: The -a, and -r, options to 'git branch' do not take a branch name. Did you mean to use: -a|-r --list <pattern>? (m・_・bp) mbp-2 20:40 ~/nekosan % git branch issue2 issue3 * master (m・_・bp) mbp-2 20:41 ~/nekosan % git status -s M nekofile.txt (m・_・bp) mbp-2 20:52 ~/nekosan % git add nekofile.txt (m・_・bp) mbp-2 20:53 ~/nekosan % git status -s M nekofile.txt (m・_・bp) mbp-2 20:53 ~/nekosan % git commit -m "bbb" [master ba9150f] bbb 1 file changed, 1 insertion(+) (m・_・bp) mbp-2 20:53 ~/nekosan % git status -s