-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.qmd
1384 lines (905 loc) · 45.7 KB
/
index.qmd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
---
format:
revealjs:
incremental: false
css: styles.css
execute:
echo: true
---
# ソフトウェア<br>カーペントリー
::: {.medlarge}
:::: {.columns}
::: {.column width="70%"}
千葉大学 2024-11-25 ~ 26
:::
::: {.column width="30%"}
![](images/qrcode.svg){height="300px" width="300px"}
:::
::::
:::
<https://swcarpentry-ja.github.io/2024-11-25-chiba-slides/>
## コラボレイティブ・ノート
:::: {.columns}
::: {.column width="70%"}
[Etherpad](https://pad.carpentries.org/2024-11-25-chiba)に**リンク**とコードを貼っておきます。
- 様々なリンクがあるので、今のうちにご自身のブラウザで開いてください。
:::
::: {.column width="30%"}
![](images/qrcode_etherpad.svg){height="300px" width="300px"}
:::
::::
## アウトライン
- スタッフの自己紹介
- ソフトウェアカーペントリーの紹介
- ワークショップの流れ
- アイスブレーカー
## スタッフの自己紹介 {.center}
## ニッタ ジョエル<br>(インストラクター)
::: {.columns}
::: {.column}
[`@joelnitta`](https://github.com/joelnitta/)
- 千葉大学 国際学術研究院 准教授
- 研究テーマ:シダ植物の進化、生態学、ゲノム解析
- 趣味:ジョギング
:::
::: {.column}
![](images/joel_nitta_in_field.png){height=350px}
:::
:::
## 西田 孝三(インストラクター)
::: {.columns}
::: {.column}
- パートタイマー
- 東京農工大学 理化学研究所 等
- 研究テーマ:パスウェイ-オミクスデータ マッピング・可視化
- 趣味:オープンサイエンスコミュニティに貢献すること
:::
::: {.column}
![](http://bioconductor.org/images/cab/kozo.png)
:::
:::
## 岡 昂輝(ヘルパー)
::: {.columns}
::: {.column}
[`@takakioka`](https://github.com/takakioka)
- 東京農工大学 工学府 生命工学専攻 修士課程
- 研究テーマ: 大規模コホートデータを用いたアルツハイマー病態進行予測に資する代謝物バイオマーカーの探索
- 趣味: ドライブ
:::
::: {.column}
![](images/helper_takaki.png){height=350px}
:::
:::
## 露崎 弘毅(ヘルパー)
::: {.columns}
::: {.column}
[`@kokitsuyuzaki`](https://github.com/kokitsuyuzaki)
- 千葉大学 医学研究院 人工知能(AI)医学 特任講師
- 研究テーマ: パッケージング、(シングルセル)オミックス解析
- 趣味: サーフィン、パン作り
:::
::: {.column}
![](images/helper_koki.jpeg){height=350px}
:::
:::
## 行動規範
どなたでも気兼ねなくワークショップに参加できるように、[行動規範](https://carpentries-coc.readthedocs.io/ja/latest/topic_folders/policies/code-of-conduct.html)があります。
行動規範に反する行為があった場合は、[インシデントレポートフォーム](https://docs.google.com/forms/d/e/1FAIpQLSeYqO37p0P-5JsEoF-E_edpZM5iRdFxWHTFqILo6LzqGS33YQ/viewform?fbzx=-8556883400541824673)で報告することができます。
## JSBiについて
![](https://www.jsbi.org/media/files/_u/key_visual/bxz0ka00r.jpg)
- このワークショップは [日本バイオインフォマティクス学会](https://www.jsbi.org/) の [公募研究会・地域部会](https://www.jsbi.org/activity/koubo/detail--id-790.htm)として採択され、ご協力をいただいています。
- 非会員の方はぜひ[入会](https://www.jsbi.org/membership/)をご検討ください。
## 準備
- [ソフトウェアのインストール(bash、git、R, RStudio)](https://swcarpentry-ja.github.io/2024-11-25-chiba/#setup)
- ファイルのダウンロード
- [bash](https://swcarpentry-ja.github.io/shell-novice/#download-files)
- [ワークショップ前アンケート](https://carpentries.typeform.com/to/CvmMM8re?slug=2024-11-25-chiba)
## ソフトウェアカーペントリーの紹介 {.center}
## 問題
::: {.columns}
::: {.column width="60%"}
- 研究者は近年、コードを使うことが必要不可欠になっています。
- 多くの研究者は独学でコードを学びます。
- しかし、効率があまり良くありません。
:::
::: {.column width="40%"}
<img src="https://2.bp.blogspot.com/-3Zik2AGqMlM/W-0gea-VWRI/AAAAAAABQKE/b0xXQ9ZeGJIOyS_1xqt_qHRmrmtOf6J7ACLcBGAs/s400/computer_typing_osoi.png" alt="drawing" height="300"/>
:::
:::
## ソフトウェアカーペントリー(SWC)の解決法
::: {.columns}
::: {.column width="60%"}
- 研究者が**コミュニティを作り**、互いに教え合います。
- 2日間にわたるワークショップで、3〜4つのレッスンを学びます。
<https://software-carpentry.org/>
:::
::: {.column width="40%"}
<img src="https://4.bp.blogspot.com/-v-d7JYMZJn0/VvKZKMuZhzI/AAAAAAAA5FQ/p8m3U0QRZ8kI8mbkOv0uMEZrwT7F5Baiw/s450/seminor_woman.png" alt="drawing" height="300"/>
:::
:::
## ワークショップ
:::: {.columns}
::: {.column width="40%"}
- 誰でも参加可能
- 無料または少額で提供
- ワークショップの指導には[資格](https://carpentries.org/become-instructor/)が必要です。
- 改善のためのフィードバックを重視します。
:::
::: {.column width="60%"}
![](https://mablab.org/img/post/2018-04-24_dcapril_s.jpg)
:::
::::
---
### 世界各国で実施
![](https://feeds.carpentries.org/plot_workshops_map.svg)
## 日本ではまだ始まったばかり
- 今回が**第2回目**の対面日本語ワークショップです。
- 今後も増やしていく予定です。
- 翻訳活動も行っています。
## 参加者大募集中!
- Slack
- <https://slack-invite.carpentries.org/> から Slack に参加し、`#local-japan` チャンネルに入ってください。
- GitHub: <https://swcarpentry-ja.github.io/>
## ワークショップの流れ {.center}
## 内容
- 25日:[Shell](https://swcarpentry-ja.github.io/shell-novice)、[Git](https://swcarpentry-ja.github.io/git-novice)
- 26日:[R](https://swcarpentry-ja.github.io/r-novice-gapminder/)
上記のリンクからレッスンの内容にアクセスできます<br>(ChatGPTによる翻訳が含まれています)
## SWCワークショップの流れ
- **軽いスライド**による内容の説明
- **ライブコーディング**
## ライブコーディングとは?
::: {.columns}
::: {.column}
- インストラクターが入力するコードを、同時に**自分のパソコンで入力**します。
- **コードを理解すること**を最優先してください<br>(メモを取るよりも)。
:::
::: {.column}
![](images/chiba_swc_2024-05-30.png)
:::
:::
## ライブコーディングとは? {.smaller}
::: {.columns}
::: {.column}
- インストラクターは参加者の理解を確認します<br>(例:「〜ができましたか?」)
- 理解できている場合は**緑の付箋**をラップトップに貼ってください。
- 困ったことがある場合は**赤い付箋**をラップトップに貼ってください。
- ヘルパーが助けに行きます。
:::
::: {.column}
![](https://carpentries.github.io/instructor-training/fig/Scene_1_blue_stickies_labeled.jpeg)
:::
:::
---
<br><br>
インストラクターが聞かなくても、何か問題があった時は**声をかけてください**(または赤い付箋を貼ってください)。
## コラボレイティブ・ノート
[Etherpad](https://pad.carpentries.org/2024-11-25-chiba)にコードを貼っておきます。
- インストラクターが進みすぎてコードが見えなくなった場合は、Etherpadのメモを参照してください。
- 参加者も自由に書き込んでください。
## フィードバックの種類
- 感想(1日の終わりに付箋に記入していただきます)
- ワークショップ前後の[アンケート](https://carpentries.typeform.com/to/CvmMM8re?slug=2024-11-25-chiba)
## アイスブレーカー
隣の方に自己紹介をしましょう
- 研究テーマは何ですか?
- 趣味は何ですか?
# Unixシェル
## データの準備
- [shell-lesson-data.zip](https://swcarpentry.github.io/shell-novice/data/shell-lesson-data.zip)をダウンロードして、デスクトップに移動してください。
- ファイルを解凍します。**デスクトップに`shell-lesson-data`という新しいフォルダが作成されているはずです。**
## 人間とコンピュータの相互作用
- 人間は**GUI**(グラフィカルユーザインターフェース)または**CLI**(コマンドラインインターフェース)を使ってコンピュータと**対話**します。
- **GUI**: 視覚的で直感的な操作が可能ですが、反復作業には効率的ではありません。
- **CLI**(Unixシェル): 反復作業に効率的で、**タスクを迅速に自動化できます**。
---
- シェルはユーザーが入力したコマンドを**解釈**し、**実行**します。
- よく使われるUnixシェル: **Bash**(**B**ourne **A**gain **SH**ell)。
- シェルを使う利点:
- 反復作業を自動化
- パイプラインを活用した効率的なデータ処理
- リモートマシンの操作や高性能コンピューティングに不可欠
---
- 今日は**コマンド**を使ってシェルと対話する方法を学びます。
## Nelleのパイプライン
- サンプルデータセットは"Nelle Nemo"のストーリーに基づいています。
- Nelle Nemoは海洋生物学者で、海洋生物をサンプリングしています。
- Nelleのタスク: `goostats.sh`を使って1520のサンプルのタンパク質量を測定します。
- 課題: GUIを使用すると、Nelleは1520のファイルを手動で実行する必要があり、12時間以上かかります。**シェルを使えば、これをより効率的に行うことができるでしょうか?**
---
![](https://swcarpentry.github.io/shell-novice/fig/filesystem.svg)
---
![](https://swcarpentry.github.io/shell-novice/fig/home-directories.svg)
## チャレンジ: `ls` {.smaller}
:::: {.columns}
::: {.column width="50%"}
`pwd`が`/Users/backup`を表示し、`-r`が`ls`に逆順で表示するよう指示する場合、**次の出力を得るにはどのコマンドを使用しますか:**
```bash
pnas_sub/ pnas_final/ original/
```
1. `ls pwd`
1. `ls -r -F`
1. `ls -r -F /Users/backup`
:::
::: {.column width="50%"}
![](https://swcarpentry.github.io/shell-novice/fig/filesystem-challenge.svg)
:::
::::
## チャレンジ: 相対パス {.smaller}
:::: {.columns}
::: {.column width="50%"}
`pwd`が`/Users/thing`を表示している場合、**`ls -F ../backup`は何を表示しますか?**
1. `../backup: No such file or directory`
1. `2012-12-01 2013-01-08 2013-01-27`
1. `2012-12-01/ 2013-01-08/ 2013-01-27/`
1. `original/ pnas_final/ pnas_sub/`
:::
::: {.column width="50%"}
![](https://swcarpentry.github.io/shell-novice/fig/filesystem-challenge.svg)
:::
::::
## チャレンジ: ファイルの移動 {.smaller}
以下のコマンドシーケンスで、最後のlsコマンドの出力はどうなりますか?
``` bash
$ pwd
```
```
/Users/jamie/data
```
``` bash
$ ls
```
```
proteins.dat
```
``` bash
$ mkdir recombined
$ mv proteins.dat recombined/
$ cp recombined/proteins.dat ../proteins-saved.dat
$ ls
```
1. `proteins-saved.dat` `recombined`
1. `recombined`
1. `proteins.dat` `recombined`
1. `proteins-saved.dat`
## チャレンジ: ファイルの整理 {.smaller}
Jamieはプロジェクトに取り組んでいますが、ファイルがあまり整理されていないことに気づきました:
``` bash
$ ls -F
```
```
analyzed/ fructose.dat raw/ sucrose.dat
```
`fructose.dat`と`sucrose.dat`のファイルはデータ解析の出力を含んでいます。 以下のコマンドが示す出力を得るために、Jamieはどのコマンドを実行する必要がありますか?
``` bash
$ ls -F
```
```
analyzed/ raw/
```
``` bash
$ ls analyzed
```
```
fructose.dat sucrose.dat
```
# Git
## なぜGitを使うのか?
- Gitとは、ファイル(コード)を追跡するソフトです。
- MS Wordの「変更履歴の追跡」機能に似ています。
- コードが「壊れた」時に巻き戻せます。
- コードの共有や共同作業を簡単にします。
## ストーリー
![](https://swcarpentry-ja.github.io/git-novice/fig/motivatingexample.png)
## ステージング・エリア
![](https://swcarpentry.github.io/git-novice/fig/git-staging-area.svg)
## ステージング・エリア
![](https://swcarpentry.github.io/git-novice/fig/git-committing.svg)
## チャレンジ: コミットメッセージを決める
以下のコミットメッセージの内、最後の `mars.txt` のコミットに最適なメッセージはどれでしょう?
1. “Changes”
1. “Added line ‘But the Mummy will appreciate the lack of humidity’ to mars.txt”
1. “Discuss effects of Mars’ climate on the Mummy”
## チャレンジ: `bio` リポジトリ
- `bio` という Git リポジトリ新しく作りましょう。
- `me.txt` というファイルに自分について3文書いて、変更点をコミットしてください。
- すでに書いた文章の内、ひとつだけ編集して、更にもう一文加えてください。
- 編集した後の状態とその前の違いを表示してください。
## チャレンジ: 変更点をコミットする {.smaller}
以下の内、`myfile.txt` を Git リポジトリに保存するためのコマンドはどれでしょう?
1. ```bash
$ git commit -m "my recent changes"
```
2. ```bash
$ git init myfile.txt
$ git commit -m "my recent changes"
```
3. ```bash
$ git add myfile.txt
$ git commit -m "my recent changes"
```
4. ```bash
$ git commit -m myfile.txt "my recent changes"
```
## `HEAD~1`の意味
![](https://swcarpentry.github.io/git-novice/fig/git-restore.svg)
## チャレンジ: ファイルの復元 {.smaller}
ジェニファーは、数週間取り組んできたPythonスクリプトに変更を加えました。そして今朝行った変更により、スクリプトが "壊れ"、動作しなくなりました。 彼女はそれを修正しようとして約1時間費やしましたが、うまく機能しません...
幸い、彼女はGitを使用してプロジェクトのバージョンを追跡していました! 以下のどのコマンドで、`data_cruncher.py` と呼ばれるPythonスクリプトの最後にコミットされたバージョンを復元できるでしょうか?
1. `$ git restore`
2. `$ git restore data_cruncher.py`
3. `$ git restore -s HEAD~1 data_cruncher.py`
4. `$ git restore -s <最後のコミットのID> data_cruncher.py`
5. 2番と4番の両方
## チャレンジ:埋もれたファイルを無視する
以下のようなディレクトリ構造があるとします:
``` bash
results/data
results/plots
```
`results/data`ではなく、`results/plots`のみを無視するにはどうすればよいでしょう?
## チャレンジ: ログファイル {.smaller}
仮に `log_01`、`log_02`、`log_03`といった中間ログファイルを作成するスクリプトを書いたとします。 これらのログファイルは保存しておきたいものの、gitで追跡したくありません。
1. `log_01`、`log_02`などのファイルを無視するためのルールを1つだけ`.gitignore`に記入してください。
1. 入力したパターンが正常に動作するか確認するために、`log_01`などのファイルを作成してください。
1. 最終的に`log_01`ファイルが重要であると判明しました。`.gitignore`を編集せずにこのファイルを追跡対象に加えてください。
1. 隣の人と、「追跡したくないファイルにはどのようなものがあるか」「.gitignoreにどのように記述するか」を話し合ってください。
## 認証の設定
- リモートリポジトリに接続する前に、自分のコンピュータをGitHubに認証する方法を設定する必要があります。
- これにより、GitHubはあなたのコンピュータからのアクセスを信頼します。
## SSH プロトコルとは?
- コマンドラインでアクセスを認証する一般的な方法を設定します。
- この方法は「Secure Shell Protocol(SSH)」と呼ばれます。
- SSHは、暗号化されたネットワークプロトコルで、通常は安全でないネットワークを介して安全な通信を可能にします。
## SSH 鍵ペアの仕組み
- SSHは「鍵ペア」を使います。
- 鍵ペアはアクセスを検証するために協働して動作する2つの鍵です。
- 一方は公開鍵(public key)、もう一方は秘密鍵(private key)と呼ばれます。
## 公開鍵と秘密鍵の例え
- 公開鍵を南京錠に例えます。
- 秘密鍵はその南京錠を開ける鍵です。
- 公開鍵をGitHubアカウントに設定し、「この南京錠で通信をロックしてください」とします。
- これにより、秘密鍵を持つコンピュータだけが通信を解読し、GitコマンドをGitHubアカウントとして送信できます。
---
### リモートリポジトリに変更をプッシュする
![](https://swcarpentry-ja.github.io/git-novice/fig/github-repo-after-first-push.svg)
## チャレンジ:GitHub の GUI
GitHub の `planets` リポジトリに移動してください。
「Code」ボタンの下にある「XX commits」というテキストを見つけてクリックします(「XX」は数字です)。各コミットの右側にある3つのボタンにカーソルを合わせてクリックします。
- これらのボタンから**どのような情報**を収集・探索できますか?
- シェルで同じ情報を得るにはどうしますか?
## 共同作業 {.center}
## GitHub を使った共同作業をしてみましょう
- 今回の課題は、**ペア**を組んで行います。
- 一人は「**オーナー**」、もう一人は「**コラボレーター**」を担当します。
- コラボレーターの目標は、オーナーのリポジトリに変更を加えることです。
- 最後に役割を交代し、両方の人がオーナーとコラボレーターの役割を経験します。
## コラボレーターにアクセス権限を与える
- GitHub のリポジトリページで「Settings」ボタンをクリックします。
- 「Collaborators」を選択します。
- 「Add people」をクリックし、パートナーの**ユーザー名**を入力します。
---
![](https://swcarpentry-ja.github.io/git-novice/fig/github-add-collaborators.png)
## コラボレーターがオーナーのリポジトリへのアクセスを受け入れる
- <https://github.com/notifications> にアクセスするか、メール通知を確認してください。
- オーナーのリポジトリへのアクセスを**承認**します。
## オーナーのリポジトリをクローンする
- コラボレーターはオーナーのリポジトリのコピーを自分のマシンにダウンロードします(**クローンする**)。
- 自分の `planets.git` バージョンを上書きしないよう、オーナーのリポジトリを別の場所にクローンしてください。
## オーナーのリポジトリをクローンする
デスクトップフォルダにクローンする場合:
```bash
$ git clone [email protected]:vlad/planets.git ~/Desktop/vlad-planets
```
`vlad` をオーナーのユーザー名に置き換えてください。
クローンパス(`~/Desktop/vlad-planets`)を指定しない場合、自分の `planets` フォルダ内にクローンされるので、**最初にデスクトップフォルダに移動してください。**
---
![](https://swcarpentry-ja.github.io/git-novice/fig/github-collaboration.svg)
## クローンしたリポジトリに変更を加える
- コラボレーターは、オーナーのリポジトリのクローンに変更を加えます。例えば:
``` bash
cd ~/Desktop/vlad-planets
nano pluto.txt
git add pluto.txt
git commit -m "Add notes about Pluto"
```
## 変更を加えたファイルをリモートに送る(プッシュ)
``` bash
git push origin main
```
## オーナーのリポジトリを確認
- オーナーのリポジトリを再確認し、コラボレーターが行った新しいコミットを確認します。
- ブラウザを更新する必要がある場合もあります。
## オーナーのローカルリポジトリの更新
- オーナーが以下を実行します:
``` bash
git pull origin main
```
- これで、3つのリポジトリ(オーナーのローカル、オーナーのリモート、コラボレーターのリポジトリ)が同期されます。
## もう一回やってみましょう
- 今度は役割を交代して、もう一度試してみましょう。
## チャレンジ:変更のレビュー
オーナーがコラボレーターに情報を提供せずにリポジトリにコミットをプッシュしました。
- コマンドラインでは、コラボレーターは何が変更されたかをどのように確認できますか?
- GitHub ではどのように確認できますか?
# ソフトウェア<br>カーペントリー 二日目
::: {.medlarge}
:::: {.columns}
::: {.column width="70%"}
千葉大学 2024-11-26
:::
::: {.column width="30%"}
![](images/qrcode_day2.svg){height="300px" width="300px"}
:::
::::
:::
<https://swcarpentry-ja.github.io/2024-11-25-chiba-slides/>
## コラボレイティブ・ノート
:::: {.columns}
::: {.column width="70%"}
[Etherpad](https://pad.carpentries.org/2024-11-25-chiba)に**リンク**とコードを貼っておきます。
- 様々なリンクがあるので、今のうちにご自身のブラウザで開いてください。
:::
::: {.column width="30%"}
![](images/qrcode_etherpad.svg){height="300px" width="300px"}
:::
::::
## 1日目のおさらい
- シェルは研究に**必要不可欠**なスキルです。
- オープンソースソフトウェアの活用
- サーバーの操作
- git の使用にも必須
- git はコードの細かな**変更を追跡し**、**共有を可能**にします。
## フィードバック:よくできたこと
- *「ふせんのおかげで質問や意思表示がしやすかった」*
- *「よくわからないことがあった時にすぐにサポートに来ていただいて大変助かりました」*
- *「トラブルが起きても言いやすい環境だったのが良かった」*
## フィードバック:改善できるところ
- *ホワイトボードの文字(図)が見づらい* → **濃いペンを使います!大きく書きます!**
- *画面の文字が少し小さい* → **大きくしました**
- *ユーザー名やディレクトリ名が色分けされるようなターミナルを用いてくれると嬉しい* → **ターミナルの設定を変えました**
- *「何のためにどうしてコマンドを行うのか、何に使うことができるのか、説明があると嬉しかったです」* → **背景の説明を増やします**
# git におけるコンフリクトの解決
---
### 質問
- 自分の変更が他の人の変更とコンフリクトする場合はどうすればいいですか?
### 目的
- **コンフリクト**とは何か、いつ発生する可能性があるかを説明します。
- **マージ**によって生じる競合を解決します。
## コンフリクトのイメージ
![](https://swcarpentry-ja.github.io/git-novice/fig/conflict.svg)
## コンフリクトを作る (コラボレーターが編集)
コラボレーターの方にだけ 1 行追加してみましょう。
``` bash
$ nano mars.txt
$ cat mars.txt
```
```
Cold and dry, but everything is my favorite color
The two moons may be a problem for Wolfman
But the Mummy will appreciate the lack of humidity
This line added to Wolfman's copy
```
## コンフリクトを作る (コラボレーターがコミット)
コラボレーターの方で変更をコミットします。
``` bash
$ git add mars.txt
$ git commit -m "Add a line in our home copy"
```
```
[main 5ae9631] Add a line in our home copy
1 file changed, 1 insertion(+)
```
## コンフリクトを作る (コラボレーターがプッシュ) {.smaller}
コラボレーターの方でコミットを GitHub にプッシュします。
``` bash
$ git push origin main
```
```
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 331 bytes | 331.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/vlad/planets.git
29aba7c..dabb4c8 main -> main
```
## コンフリクトを作る (オーナーが編集)
オーナーが GitHub から pull せずに、自分のコピーに「別の」変更を加えてもらいます。
``` bash
$ nano mars.txt
$ cat mars.txt
```
```
Cold and dry, but everything is my favorite color
The two moons may be a problem for Wolfman
But the Mummy will appreciate the lack of humidity
We added a different line in the other copy
```
## コンフリクトを作る (オーナーがコミット)
オーナーは変更をローカルにコミットできます:
``` bash
$ git add mars.txt
$ git commit -m "Add a line in my copy"
```
```
[main 07ebc69] Add a line in my copy
1 file changed, 1 insertion(+)
```
## コンフリクトを作る (オーナーがプッシュ「できない」) {.smaller}
しかし、オーナーは Git で GitHub にプッシュできません。
``` bash
$ git push origin main
```
```
To https://github.com/vlad/planets.git
! [rejected] main -> main (fetch first)
error: failed to push some refs to 'https://github.com/vlad/planets.git'
hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
```
## コンフリクトのイメージ
![](https://swcarpentry-ja.github.io/git-novice/fig/conflict.svg)
Git は、リモート リポジトリにローカル ブランチに組み込まれていない新しい更新があることを検出したため、プッシュを拒否しました。
## コンフリクトの解決 (オーナーが git pull する) {.smaller}
必要なのは、GitHub から変更を pull し、現在作業中のコピーにマージしてからプッシュすることです。
まずは pull から始めましょう:
``` bash
$ git pull origin main
```
```
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (1/1), done.
remote: Total 3 (delta 2), reused 3 (delta 2), pack-reused 0
Unpacking objects: 100% (3/3), done.
From https://github.com/vlad/planets
* branch main -> FETCH_HEAD
29aba7c..dabb4c8 main -> origin/main
Auto-merging mars.txt
CONFLICT (content): Merge conflict in mars.txt
Automatic merge failed; fix conflicts and then commit the result.
```
## コンフリクトの解決 (拒否されたマージの結果) {.smaller}
git pullコマンドは、ローカル リポジトリを更新して、リモート リポジトリにすでに含まれている変更を組み込みます。
リモート ブランチからの変更が取得された後、Git はローカル コピーに加えられた変更がリモート リポジトリに加えられた変更と重複していることを検出し、
以前の作業が損なわれないように 2 つのバージョンのマージを拒否します。
コンフリクトは、影響を受けるファイルで下記のようにマークされます。
``` bash
$ cat mars.txt
```
```
Cold and dry, but everything is my favorite color
The two moons may be a problem for Wolfman
But the Mummy will appreciate the lack of humidity
<<<<<<< HEAD
We added a different line in the other copy
=======
This line added to Wolfman's copy
>>>>>>> dabb4c8c450e8475aee9b14b4383acc99f42af1d
```
## コンフリクトの解決 (マーカーを削除し、変更を調整する)
このファイルを編集して、これらのマーカーを削除し、変更を調整するのは私たちの仕事です。
ローカル リポジトリでの変更を維持するか、リモート リポジトリでの変更を維持するか、両方を置き換える新しいものを書き込むか、変更を完全に削除するか、何でも好きなように行うことができます。
両方を置き換えて、ファイルを次のようにしてみましょう。
```
Cold and dry, but everything is my favorite color
The two moons may be a problem for Wolfman
But the Mummy will appreciate the lack of humidity
We removed the conflict on this line
```
## コンフリクトの解決 (マージを完了するために変更をコミットする) {.smaller}
``` bash
$ git add mars.txt
$ git status
```
```
On branch main
All conflicts fixed but you are still merging.
(use "git commit" to conclude merge)
Changes to be committed:
modified: mars.txt
```
``` bash
$ git commit -m "Merge changes from GitHub"
```
```
[main 2abf2b1] Merge changes from GitHub
```
## コンフリクトの解決 (ついに push してコンフリクトを解決) {.smaller}
``` bash
$ git push origin main
```
```
Enumerating objects: 10, done.
Counting objects: 100% (10/10), done.
Delta compression using up to 8 threads
Compressing objects: 100% (6/6), done.
Writing objects: 100% (6/6), 645 bytes | 645.00 KiB/s, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 2 local objects.
To https://github.com/vlad/planets.git
dabb4c8..2abf2b1 main -> main
```
## コンフリクトの解決 (今度はコラボレーターが pull する) {.smaller}
Git は何を何とマージしたかを追跡しているので、最初の変更を行ったコラボレーターが pull したときに、再度手作業で修正する必要がありません。
今度はコラボレーターが pull してください
``` bash
$ git pull origin main
```
```
remote: Enumerating objects: 10, done.
remote: Counting objects: 100% (10/10), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 6 (delta 4), reused 6 (delta 4), pack-reused 0
Unpacking objects: 100% (6/6), done.
From https://github.com/vlad/planets
* branch main -> FETCH_HEAD
dabb4c8..2abf2b1 main -> origin/main
Updating dabb4c8..2abf2b1
Fast-forward
mars.txt | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
```
## コンフリクトの解決 (コラボレーターがオーナーにマージされた内容を確認) {.smaller}
コラボレーターはオーナーにマージされた内容を確認してみましょう
``` bash
$ cat mars.txt
```
```
Cold and dry, but everything is my favorite color