初めて自作コマンドを作った
冒頭から別件なのですが,以前書いた情報系学科に関する記事に普段よりもたくさんイイネをいただきました.読んでくださった方,ありがとうございます🙏
結構雑に列挙しただけだったので,どうせならもっとしっかり書くべきだったなと思います笑
話を戻します.今回も実は何種類か書きたいテーマがあったのですが,最近技術的なアウトプットが手薄だったので,最近業務で使い始めた自作コマンドについて紹介します.先に断っておきますが,全然大した内容ではないです😅 初めてコマンドを作ったという単なる記念です笑
背景
大学の3年生まで遡ります.研究室に配属され,これからいよいよ研究がスタートという時に指導教員から一番最初にレクチャーされたノウハウは,「メモの書き方」でした.メモの書き方については今回の本題ではないので紹介しませんが,日々の活動内容や覚え書き,思いついたことなどを数ヶ月後の自分が読み返しても理解できるようなメモの書き方について教わりました.思った以上に効果があり,研究ではとても役に立ったため,大学,大学院を卒業して社会人となった今でも行っている習慣となっています.
メモはメモ用のディレクトリに,ファイル名が日付のテキストファイルを作成して,そこに書いていました.コマンドはこんな感じで大したことのない内容です.
$ cd ~/Desktop/memo
$ emacs 20210828.txt
エンジニアは怠惰な生き物なので,毎日これをやっていると,日付を入力するのが面倒になってきます.時には今日が何日なのかもわからないのでカレンダーを確認するところから始めないといけません.せっかくロードマップでlinuxについて勉強したので,毎日行うこの作業をコマンドひとつで済ませたいと思ったのがつい最近です.
要件的な
まず,前提として,
・メモのディレクトリは~/memo
・メモディレクトリの配下以外ではメモファイルは作って欲しくない
・すでに作成済みならそのファイルを開いて欲しい
というものがあります.今まではデスクトップ上に何でもフォルダを作っていたのですが,仕事でエンジニアをやっていると,プロジェクトのフォルダが大量発生するのでやめました.あと,学生時代はemacsを使ってメモを書いていましたが,今年からvimに変えました.emacsが嫌いなわけではないですが,自分が対してプラグインも使わず,カラースキーマを変えて楽しむ程度しかしてこなかったのでやめました.今までありがとうemacs.
成果物
前準備として自作コマンド用のディレクトリを用意しておきます.
$ mkdir ~/.mycommand
コマンドを使えるようにするためにパスを通します.自分は.zshrcに追記しました.
$ vim ~/.zshrc
これを追加.
export PATH=$PATH:$HOME/.mycommand
変更を反映.
$ source ~/.zshrc
コマンド名はうまく思いつかなかったのでnewmemoにしました.作ってから思ったのですが,ターミナルの補完ですぐに出てこないのであまり良くないコマンド名ですね...
$ touch ~/.mycommand/newmemo
以下,スクリプト内容です.
#!/bin/bash
CURRENT_DIR=$(pwd)
MEMO_DIR=$HOME/memo
TODAY=$(date "+%Y%m%d")
MEMO_FILE=$TODAY.txt
if [ $CURRENT_DIR != $MEMO_DIR ]; then
echo 'current directory is not memo directory'
exit 1
fi
vim $MEMO_FILE
このままではただのスクリプトファイルなので権限を変更.
$ chmod 700 ~/.mycommand/newmemo
パスが通っていて,なおかつコマンドが認識されているかを確認.
$ which newmemo
/Users/soichiro/.mycommand/newmemo
これにて完成です.メモディレクトリ配下でnewmemoと実行すれば当日の日付でテキストファイルが作成されてvimで開かれます.メモディレクトリ以外の場所で実行してもエラーで失敗するように設定してあります.
さいごに
とても簡単なスクリプトですが,作業効率化のために自分で何かを作るというエンジニアリングを経験できる良いケースだったと思います.機会があればもっとスクリプトを組んでみたいですね.
メモの書き方について,当時の指導教員からレクチャーされたノウハウを活かして業務でも使っているのですが,業務の一環で調査内容や進捗内容をマークダウンで書くことが度々あるので,そのままメモの内容をコピペできるようにマークダウン形式を意識しながら独自にノウハウを進化させています.