SWC @ 千葉大学

2024-05-30, 2024-05-31

https://software-carpentry.org/

https://swcarpentry-ja.github.io/

リンク

マークダウン記法

https://qiita.com/tbpgr/items/989c6badefff69377da7

  • "#"で見出し
  • "-"で箇条書き
  • "```"でコード埋め込み
ls

作業メモ by ヘルパー(5/30,31)

  • シェル(Bash)
    • URL: https://swcarpentry-ja.github.io/2024-05-30-chiba-slides/shell/
    • shell-lesson-data.zipを事前にダウンロード
    • ターミナルを起動
      • Windows: 事前にインストールしたGit Bash
        • スタートメニュー -> git bash と入力
      • Mac OS: ターミナル.app
    • GUI vs CLIの説明
    • ls # listの略(何があるかリストアップ)
    • ファイルシステムの説明
    • pwd # print working directoryの略(パスの表示)
    • ルートディレクトリ、/の説明
    • ls -F # 出力フォーマットの調整(環境によっては変化なし?)
    • clear # これまでの出力履歴を消す
    • ls --help # lsコマンドのヘルプファイルの表示(長いオプションは--と2回書く場合が多い)
    • man コマンド名 # manualの略(同じくヘルプファイルの表示)
    • チャレンジ: ls
    • cd ディレクトリ名 # change directoryの略 (別の作業ディレクトリに移動)
      • 応用例
        • cd # ホームディレクトリに移動
        • cd .. # 上の階層に移動
        • cd ~ # 直前にいたディレクトリ
    • 絶対パス(ルートから見たパス) vs 相対パス(現在いるところから見たパス)の説明
    • チャレンジ: 相対パス
    • シェルスクリプトの構文の説明
    • 隠しファイル、隠しディレクトリ(.から始まるもの)
      • ls -a # で表示可能
      • ls --all # ロングフォームVer
    • ファイル、ディレクトリ操作
      • mkdir ディレクトリ名 # make directoryの略(ディレクトリを作成)
      • 応用例
        • mkdir -p dir1/dir2/dir3... # ネスト(入れ子)のディレクトリをいきなり作れる
        • ls -FR dir1 # ネストされたディレクトリを全て表示
    • ファイル名に適さない文字(スペース、-、~)
    • テキストエディタ(nano
      • nano ファイル名 # nanoの起動
        1. 何か書く
        2. Ctrl + o: 保存
        3. またはCtrl + X: nanoの終了、保存するか聞かれるから「Y」、Enter
      • cat ファイル名 # concatinateの略 (ファイルの中身を全部見る)
      • touch ファイル名 # ファイルが無い場合はファイルを作成、既にある場合はタイムスタンプを変更
      • 拡張子の説明
      • rm ファイル名 # removeの略(ファイルの削除)
        • !!!カーソルでゴミ箱に入れる場合と違い、完全に消えてしまうので注意!!!
      • mv file1 file2 #ファイル/ディレクトリの移動、または名前の変更
      • cp file1 file2 # ファイルのコピー
      • cp -r dir1 dir2 # ディレクトリのコピー
      • rm -r dir # ディレクトリの削除
        • !!!カーソルでゴミ箱に入れる場合と違い、完全に消えてしまうので注意!!!
      • 複数のファイル、ディレクトリに同時に操作したい場合
        1. 全部列挙する
          • cp file1 file2 dir # file1 file2をdir以下にコピー
        2. ワイルドカード(*や?)を使う
          • cp file* dir # fileから始まるファイルをdir以下にコピー
      • チャレンジ: パターンに一致するファイル名
      • チャレンジ: ディレクトリとファイルの整理
    • ターミナル上でCtrl + C(実行中のコマンドをキャンセル)
  • Git
    • URL: https://swcarpentry-ja.github.io/2024-05-30-chiba-slides/git/
    • 教材: https://swcarpentry-ja.github.io/git-novice/01-basics.html
    • git config --global user.name "MYNAME" # ユーザー名の登録
    • git config --global user.email "myemail.address@gmail.com" # メールアドレスの登録
    • git init # 今いるディレクトリをgitレポジトリ(変更履歴の追跡対象)にする
      • ls -a # うまくいくと.gitが生成される
    • チャレンジ: gitレポジトリの中に、gitレポジトリを作ってしまったらどうなるか?
    • 使い方(基本)
      1. 何かファイル、ディレクトリを作成・変更する(e.g., nano mars.txt
      2. git add ファイル名 # 追跡(Track)対象リストに追加
      3. git commit -m "コミットメッセージ" # コミット(変更を保存)
    • git status # 現在の状況を表示
    • git log # ログ(これまでのコミットの履歴)を表示
    • git diff # 差分を表示(現在変更)
    • git diff --staged # 以前のコミットの差分を表示
    • コミットメッセージを囲むクォートは半角でなければいけません。プロンプトが >dquote となっている場合、正しくクォートを閉じられていないので、一度 Ctl+C でコマンドをキャンセルして、やり直すとよいです。
  • GitHub
    • 他の人とともコードを共有するためのもの
    • とにかくローカルマシン上に秘密鍵(例 : id_rsa)、リモート側に公開鍵(例 : id_rsa.pub)がある状態を作る
    • それにより安全に通信できる
    • 秘密鍵と公開鍵のペアの生成 ssh-keygen -t ed25519 -C "myemail.address@gmail.com"
    • GitHub上で公開鍵をコピペ
    • ssh -T git@github.comでうまく通信できるかチェック
    • ローカル・リモート連携方法
      • 1. 最初にローカルがあり、それをリモート側にpushパターン
        • 同名の空リポジトリをリモート側で作る
        • git remote add originでローカル側と連携
        • git remove -vで確認
      • 2. 最初にリモート側を作っておき、それからローカル側に落としてくるパターン
        • git clone https://github.com/ユーザー名/リポジトリ名.gitでローカルに落としてくる
        • 以降は普通にgit add/commit/push
  • 共同作業
    • 隣りの人をCollaboratorに設定、リモートリポジトリをgit cloneしてもらい、変更したものをpushしてもらう練習
    • Host⇄Collaboratorの役割を逆にしてもう一度練習
  • 衝突(Conflicts)
    • Hostがリモート側に変更を加えたことを、Collaborator側が気づかずに、git pushしたことでコンフリクトしたというシナリオ
    1. ファイルに変更を加える
    2. git add/commitをする
    3. git push origin mainをしたところrejectされる
    4. git pullしたところ、コンフリクトしているとわかる
    5. 該当箇所を修正(Host側を残すか、Collab側を残すか、全く別の記述をするか)
    6. git push origin mainができることを確認

作業メモby ヘルパー(5/31)

  • Docker
    • URL: https://swcarpentry-ja.github.io/2024-05-30-chiba-slides/docker/
    • Dockerとはコンテナ管理システム
    • コンテナ: 必要なデータやコードやライブラリを格納した実行中のプログラム(プロセス)
    • イメージ: コンテナを作るためのファイル、コンテナのベースとなるもの
    • コンテナと仮想マシンの違い
    • Docker Desktopを起動、右上にくじらのアイコンが表示されていることを確認
      • !!!注意: Dockerは常駐プログラムなので、最初に起動しておかないと、各種dockerコマンドは使えない!!!
    • docker container lsをターミナルで実行
    • 色々なオプションがあることを確認
      • docker --help
      • docker container --help
      • docker container ls --help
      • docker image --help
      • docker image ls --help
      • docker images --help
    • docker image pull hello-world(または単にdocker pull hello-world)でhello-worldイメージがダウンロードされる
    • docker container run hello-world(または単にdocker run hello-world)でhello-worldの出力を確認
    • docker container run コンテナ内で実行するLinuxコマンドで色々なことができる(echo, cat, ls, whoami, pwd
    • docker container run -it alpine sh # 対話モードで実行
    • exit # コンテナの中から出る場合(Ctrl + Dでも可)
    • チャレンジ: ubuntuコンテナ内部でapt-get --help
    • docker image rm イメージID(または単にdocker rmi イメージID)でイメージファイルを削除
    • !!!注意: そのイメージから作られたコンテナがまだ起動中だと削除できない!!!
    • docker container ls(または単にdocker ps)で起動中のコンテナを一覧
    • docker container ls --allだと、起動はしていないけど、シャットダウンもされていない状態のコンテナ達で出力
    • docker container prune # 全てのコンテナを削除
  • DockerHub
  • Dockerコンテナを自作する
    • Dockerfileという名前のファイルを作成
    ​​​​FROM alpine
    ​​​​RUN apk add --update python3 py3-pip python3-dev
    ​​​​CMD ["python3", "--version"]
    
    • docker build -t 自分のユーザー名/イメージ名 .(または単にdocker image -t 自分のユーザー名/イメージ名 .)として、イメージを生成
    • docker container run 自分のユーザー名/イメージ名 コマンド名 # 自作したイメージをコンテナ化 & 実行
    • docker image push # 自作したイメージをDockerHubに登録
    • マウント(自分のPCのディレクトリとコンテナ内を接続する)
      • docker container run --mount type=bind,source=${PWD},target=/temp alice/alpine-python python3 /temp/sum.py(または単にdocker run -v $(pwd):/temp python3 /temp/sum.py
    • チャレンジ: マウントした後のコンテナ内部に対話モードで入る、ローカルファイルを触れるかチェック
    • ビルド時にイメージファイルの中にファイル(例: プログラム、データ)を入れる(COPYタグをDockerfile内で使う)
    • コンテナ内部にあるプログラムにパラメーターを渡したい
      • CMDだとコマンドとして解釈されてしまう
      • ⭕️ ENTRYPOINTタグを使う
        • ENTRYPOINTを設定したコンテナ内部には対話モードで簡単に入れない
          • docker run -it時に--entrypoint /bin/shが別途必要
    • Dockerfile集