マージ・リベース(こわくない Git)


コミット・ブランチ・マージ・リベースを実行した際に、何が起こっているか分かりやすく解説されているスライド。


リベースの功罪

GOOD

  • コミットグラフが綺麗になる
    • マージ後のログが綺麗になるので、 main にマージする直前にやるのは ok とすることがある
    • プルリクエストを送る場合は、rebase してから送るのがマナーとされている

BAD

  • すでに push されたブランチをリベースすると、push できなくなる
  • 「マージした記録」が消失する
  • マージに比べるとコンフリクトが起こった場合の解消に手間がかかる

学習習慣の改善策 ver1.0

@uchihiro さんの LT 会の内容が、今の自分の問題点にちょうどオーバーラップしたため、発表されていた内容をベースに自分の生活サイクルに当てはめて、学習習慣の見直し・改善を考えてみる。

現状の問題点

  • 仕事の凪/多忙が読みにくいため、週次・月次目標が立てづらい
    • ガチガチに予定を組むと、進捗が遅れた場合かえってやる気が削がれる
  • ラクティスの内容によって進度が大きく変わる・予測できない
    • すんなり進むときと、はまり込む時の差が大きすぎる
  • 日報の提出を重荷に感じてしまう時がある
    • 「しっかりまとめないと」といった自縛みたいな
  • 技術書や公式リファレンスと向き合う順番が、一番最後になっておざなりになりがち
    • 技術書
      • 手元にあるものの、まずは PC に向かって作業してしまうので結局最後になり「明日でいいか」となりがち
    • 公式リファレンス
      • そもそも嫌い
  • ポモドーロで時間を区切っても無視してしまう

改善策 ver1.0

仕事の凪/多忙が読みにくいため、週次・月次目標が立てづらい

  • ここは外的な要因が大きいためコントロールできる範囲が限られている
    • Linux の学習でも活かせることがあったように、できるところは時短・自動化してタスクを圧縮していくほか、現状で思いつくことはあまり無い
  • 月次で予定を組むとほぼトレース不可能になってしまうので、週次で予定を立て、細かく軌道修正していく
    • 毎週日曜日を、週次予定を立てる・見直し軌道修正する日として固定する
  • 「進捗に遅れが出ても仕方ない」くらいの心持ちでいる

ラクティスの内容によって進度が大きく変わる・予測できない

  • 「量」(何ページまで・プラクティス単位など)ざっくり区切らない
    • 「参考リンク 1 記事」「技術書の章・節」と、タスクをなるべく細分化して区切る
  • 細かく区切った内容を学習のロードマップとして目次化し、日報上で進捗を追う(マークダウンのチェックボックス使う)

日報の提出を重荷に感じてしまう時がある

  • 些細な内容でよいので、学習した日はまずは提出することを優先する
    • 学習の記録は逐一書いているので、まとめが多少雑になってもよいので必ず当日中に提出する
  • 「しっかり書き込んだ日報を提出しないと」といった謎のプレッシャーは、ただの思いこみ

技術書や公式リファレンスと向き合う順番が、一番最後になっておざなりになりがち

  • 「ポモドーロ 1 回目は技術書・公式リファレンスを見る」時間に充ててみる
    • 基本は技術書・公式リファレンスを 1 日おきに行き来する
  • よくよく考えると、最もノイズが少ない情報源なはずなのに一番後回しにしていた気がする(公式リファレンスは忌避)
  • 思考停止でタスクを強制する方がよい
  • 最初の 25 分で切り上げる
    • 本題はプラクティスの着手
    • この時間は復習と助走
  • 公式リファレンス(英語)の対処
    • DeepL のデスクトップアプリを常駐化
      • Command + Shift + D ショートカット割り当て

ポモドーロで時間を区切っても無視してしまう

  1. タイマー音が鳴ったら、パブロフの犬のごとく椅子から立ち上がる
  2. 整体院でもらった背筋矯正ポールにのる

改善策のアップデート

  • 上記の改善策を定期的に見直し、ブラッシュアップする

リモートのLinux環境でPythonファイルを実行する

先日の記事、「シェルスクリプトに書いた命令を指定時刻に実行する」を書き終えてから、「そういや、シェルスクリプトじゃなくて Python ファイルって Linux 上で動かせるの?」と思ったのでメモ。

まずは、バージョン確認。

% python3 -V  
Python 3.7.3

正直、Linux にインストールした記憶がないのだが、もしかすると apt install を試していた時にインストールしていたのかもしれない。

続いて、適当なファイルを作って処理を書いてみる。

% touch test.py
% vim test.py
% cat test.py

l = [1, 2, 3, 4, 5]
for i in l:
    print(i)

以下でスクリプトを実行できるようだ。

% python3 test.py

1
2
3
4
5

ぬー。
Linux、めちゃ便利。

今まで「自分のパソコンがついてないと、指定時刻に Python スクリプトを自動実行できぬ」だったのが、24 時間いつでも OK ということか。
またひとつ、Linux のことが好きになった。

リモート環境のLinuxから指定時刻にファイルを自動でFTP転送する

とある事情から、指定時刻に FTP 経由でファイルをアップロードする必要がありました。
ローカルマシンを使うと、コンピューターをスリーブさせていたり電源を落としていると機能しません。

なので、何月何日何時何分であろうとも決められた時間に確実にファイル転送するには、リモート環境にインストールした Linux から処理を実行する必要があります。
今回はその手順の総集編といった内容です。
それぞれの詳細は下記のエントリーに記載しています。

全体の流れは以下。

Step 1 : ローカル → リモート上の Linux へファイル転送

scp <送るファイル> htk:~/dir

Step 2 : 「ファイルを FTP 転送する」という処理のシェルスクリプトを用意

#!/bin/sh

ftp -p -n << EOF
  open <FTPサーバー名(ホスト名)>
  user <ユーザー名> <パスワード>
  binary
  cd <サーバー上のディレクトリ>
  lcd <ローカルのディレクトリ>
  put <アップロードするファイル>
  quit
EOF

Step 3 : 指定時刻にシェルスクリプトを実行

# 2022年9月19日10:00 に実行
% at -f <シェルスクリプトのファイル名> 10:00 091922

補足

男前と、ハイボールと、シークワーサー。

同性から見て思う美人。
同性から見て思う男前。

そんな風に思える人が、あなたにもいるのかもしれないし、いないのかもしれない。

先日、妻がリビングでテレビを見ていた。
何気なく横からのぞいてみると、画面の中には僕が思う「同性から見て思う男前」が 2 人いた。

浅野忠信と、オダギリジョー

2 人とも 40 代後半とのことだったが、残念な歳のとり方をしていなかった。
カッコよかった。

話は変わり、数年前にあったある出来事について。

僕は当時の取引先の担当さんと会うことになった。
遠方の会社だったこともあり、それまでメールか電話でしかやり取りしたことが無かったので、実際に顔を向き合わせて話すのは緊張したし新鮮だった。

打ち合わせも終盤に近づいた頃、その担当さんは不意に言う。
「ウチの社長が僕さんに会いたいと言ってたんだけど、時間ある?」と。

どうせ一泊して帰るつもりだったし、そのままホテルに戻るのもつまらないので、「はい、全然大丈夫です。」と答える。

担当さんはスマホに手をのばし、社長あてに電話をかけて何やら通話しはじめた。
そして、そのとき社長さんは外出中とのことで、夕方前くらいに合流することで話がまとまった。
担当さんは「じゃあ、そういうことで今後ともよろしく」的な挨拶を残し、あっさりと帰って行った。

予定していなかった流れだったし、相手が社長さんということもあり、ソワソワしながらその時を待った。

約束の時間から 5, 6 分ほど遅れてその人は現れた。

浅野忠信によく似た社長が。

「お待たせしてすみません。」と、その人は言う。
そこから小一時間ほど仕事の話をした。

僕が話している間、社長は会話を遮ることはなく、僕からの質問に対しては数秒の間をおいて的確な回答をした。
多くを語らず、振る舞いは紳士だった。
知的でミステリアスな人だった。
年齢は 40 代半ばくらい。
若い頃はモテて、ブイブイいわせてたに違いない。
いや、モテていないはずがない。
現在進行系で。

打ち合わせも一段落した頃、浅野忠信は言う。

「僕さん、この後予定ありますか?」
「よければ、知ってるお店でいい所があるんですよ。」

断る理由はない。
なにせ相手は浅野忠信なのだ。

連れて行かれた店は創作系フレンチと言えるようなところだった。
ただ、キャピキャピしたような雰囲気ではなく、個室でゆったり寛げる素敵な店だった。
メニューを見ても結構いいお値段だった。
味もとてもうまかった。

腹も満たされ、ほどよく酒もまわってきた頃、浅野忠信は言う。

「僕さん、よければもう一軒どうですか?」

酒好きな私に断る理由は無い。
なにせ相手は浅野忠信なのだ。

連れて行かれた次なる店はかなり綺麗なクラブだった。
そして、これまた綺麗なお姉さんが 2 人、席についた。

こちらの店も浅野忠信はよく来ているらしく、ボトルキープしているウイスキー、氷、ソーダ水がテーブルに運ばれる。
そして浅野忠信はおもむろに持っていた鞄の中から「一本のペットボトル」を取り出した。

高級そうなクラブ、美女、そして浅野忠信
そういった空気の中でペットボトルは嫌でも目を引いた。

「社長、それって...」

「うん、シークワーサーの原液。」
「沖縄から取り寄せてるんですよ。」

「シークワーサーの原液...」

「最近、歳のせいか酒の抜けが悪くてねぇ。」
「でも沖縄に旅行に行った時にこいつに出会って、以来ぞっこんなんですよ。翌朝が全然ちがう。」
「よかったら一杯飲んでみます?」

お姉さんにお願いして、浅野忠信と同じものを作ってもらい飲んでみた。
だが、翌朝はその効果を感じることはなかった。

それから数年の月日が流れ、現在。

最近なんだか酒の抜けが悪くなってきた気がする。
翌朝の体の重だるさがしんどい。

ある日、スーパーへの買い出しで妻に同行した時、何気なく売り場を見ていると「そいつ」がいた。

シークワーサー原液。
浅野忠信の記憶が蘇った。

1 本約 1,000 円と、ペットボトルではあり得ない価格だが自然と手が伸びた。
家に連れて帰り、ハイボールの中に注ぎ足す。

以来、最近感じていた酒の抜けの悪さが、体の中からほとんど消えていた。
月の周りの雲が晴れていくように。

そして私は今宵も飲む。
ハイボールとシークワーサーを。
時折、あの男前を思い出しながら。

  • いろいろ種類があるのかもしれないけど、個人的には「JAおきなわ」のシークワーサー原液がおすすめだよ!(・∀・)
  • 楽天でセット売りしてるのがコスパいい(1 本 700 円くらい)と思うよ!(・∀・)
  • 「高い!」と思うかもしれないけど、1 本で 1 週間くらいはいけるので(もちろん用量による)、日割り換算すればそれほどでもないと思うよ!(・∀・)
  • あんまり飲み過ぎると下痢になるかもしれないよ!(・∀・)

シェルスクリプトに書いた命令を指定時刻に実行する

前回の投稿「SSH接続:リモートのLinux上にローカルファイルを転送する」の続きです。
最終的な目標は、「FTP ファイル転送を指定時刻に自動実行」ですが、今回は指定時刻に処理を実行する「at コマンド」と、処理内容を書き込む「シェルスクリプト」について調べたことを書いてみます。

前提

改めて、今回の最終的な目標は「FTP ファイル転送を指定時刻に自動実行する」ですが、正確には「寝ている間でも FTP ファイル転送を指定時刻に自動実行する」なので、「手元のローカルマシンを起動しておかなければならぬ」では夢を実現できません。(多分)

なので、前回の記事のとおり、「さくらVPS にインストールした Linux」に、定められた時間に僕がどこで何をしていようとも、目的の処理を実行してもらうことをゴールとしています。

シェルスクリプト

まずはじめに、シェルスクリプトとは、実行するコマンドを書いた指示書みたいなもの。
今回の場合、シェルスクリプトに予め実行したい命令を書いておき、at コマンドで指定時刻にそれを実行することでプログラムの自動化が図れるっぽい。

  • 基本的な書き方
#!/bin/sh

% touch hoge.txt
% sh hoge.sh

at コマンド

デフォルトで at が入っていないのでインストールする。

% sudo apt install at

指示を書いたシェルスクリプトを指定時刻に実行するには、以下のように記述するようだ。

# 2022年9月19日 10:00 に hoge.sh の内容を実行
% at -f hoge.sh 10:00 091922

その他、使いそうなコマンド。

  • 実行予定のジョブ一覧を表示
% at -l
  • 実行予定のジョブを削除
% at -d <ジョブ番号>
  • 実行予定のジョブ内容を表示
% at -c <ジョブ番号>

シェルスクリプトに書いた命令を指定時刻に実行する

上記までの例のまんまだが、一連の流れを再現してみる。

  • まずは hoge.sh というファイル名でシェルスクリプトを作る
    • % vim hoge.sh
    • 記載内容は下記で hoge.txt というファイルを作るだけの内容
#!/bin/sh

% touch hoge.txt
  • 続いて at コマンドで実行する時刻を指定する
% at -f hoge.sh 13:10 091922
  • ジョブが登録されているか確認してみる
% at -l
5  Mon Sep 19 13:10:00 2022 a htksn
  • ちゃんと登録されているっぽいので、一旦 Linux から抜ける
    • 指定した時間がくるまでソワソワしながら正座待機
% exit
  • 時間が来たので再度 SSH 接続して Linux の様子をうかがってみる
% ssh htksn
% lsa

(中略)
-rw-r--r-- 1 htksn htksn    26 Sep 19 13:03 hoge.sh
-rw-r--r-- 1 htksn htksn     0 Sep 19 13:10 hoge.txt
(中略)

やったね!!

まとめ

ここまでで、「ローカルのファイルをリモートの Linux 環境に送る」と、「リモートの Linux 環境で指定時刻に処理を実行する」までは実現できた。
残りは「ファイルを FTP 転送する」をクリアできれば素晴らしき日々をまた一つ獲得できる(はず)

今回は以上です。