プログラミングめもめも

プログラミングの学習メモです

microCMSの公開日時を日本時間に変更する方法

microCMSの記事公開日時はpublishedAtで取得できますが、タイムゾーンUTCになっています。

console.log(blog.publishedAt);

// 出力結果
2023-09-14T16:19:05.385Z

これをJST日本標準時)に変更して出力する方法をまとめました。

dayjsをインストール・インポート

dayjsはJavaScriptの日付を操作するライブラリです。こちらをnpmでインストールしておきます。

npm i dayjs

インポートしたら、必要なプラグインを準備しておきます。

import dayjs from "dayjs";
import utc from "dayjs/plugin/utc";
import timezone from "dayjs/plugin/timezone";

dayjs.extend(utc);
dayjs.extend(timezone);
dayjs.tz.setDefault("Asia/Tokyo");

日時を変換

実際に使ってみます。microCMSで取得するpublishedAtをそのままJSTに変換できます。

const publishedDate = dayjs(blog.publishedAt).tz().format();

console.log(publishedDate); // 2023-09-15T01:19:05+09:00

ただ表示するには長すぎるので、フォーマットを"YYYY/MM/DD"に指定します。

const publishedDate = dayjs(blog.publishedAt).tz().format("YYYY/MM/DD");

console.log(publishedDate); // 2023/09/15

これで日付のずれがなくなりました!

【Python】sysライブラリの使い方を解説します

sysとは、Pythonの実行環境やインタプリタで使っている変数や関数を扱うライブラリです。

docs.python.org

例えば、インポートされているモジュールを文字列で返すsys.pathや、LinuxmacOSなどのスクリプトが実行されている環境を返すsys.platformなどがあります。

本記事では、スクリプト実行時に渡されるコマンドライン引数を管理できるsys.argvの使い方を紹介します。

sys.argvとは

コマンドラインPythonスクリプトを実行する時、コマンドライン引数を設定することがあります。

例えば以下のように、hoge.pyを実行する時に2つのコマンドライン引数を渡すイメージです。

$ python hoge.py arg1 arg2

この時に渡される引数を扱えるようにするのが、sys.argvです。

sys.argvの使い方

例として、コマンドラインでカレンダーを表示するプログラムを作成するとします。 コマンドライン引数に-m 月を指定すると、指定した月のカレンダーが表示されるイメージです。

$ python hoge.py -m 10
      102024
Mo Tu We Th Fr Sa Su
    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

この時、-m 10の部分がコマンドライン引数です。

1. sysをインポート

sys.argvはsysライブラリをインポートして使います。

import sys

2. コマンドライン引数を取得

コマンドライン引数はsys.argvでリスト形式で取得できます。

print(sys.argv)
$ python hoge.py -m 10
['calendar.py', '-m', '10']

上記のように、リストの1番目(sys.argv[0])はファイル名で、sys.argv[1]からコマンドライン引数となります。

渡された引数によって処理を変えたい場合は、次のようにif~elseで条件分岐すると良いと思います。

if len(sys.argv) == 1:
    # 引数がない場合(要素数が1、ファイル名のみ)の処理
elif len(sys.argv) == 2 and sys.argv[1] == "hoge":
    # 引数が1つかつその値が"hoge"だった場合の処理
else:
    # ...

参考:argparseについて

コマンドライン引数を受け取る処理は、argparseというライブラリでも可能です。

docs.python.org

sys.argvはリストのインデックス番号でしか管理できないため、引数がたくさんあったり、省略可能な引数があったりする場合は処理が面倒になります。 そうした場合はargparseが便利だそうです。

上記と同様-m月を引数として取る場合、次のように取得できます。

# ライブラリインポート
import argparse

# パーサーを作成
parser = argparse.ArgumentParser(description='プログラムの説明')
# 引数を設定
parser.add_argument('-m')
# スクリプト実行時に渡された引数を取得
args = parser.parse_args()
print(args.m)

これで実行すると、-mの後に指定した値が取得できます。

$ python hoge.py -m 10
10

# 未指定だとNoneが返る
$ python hoge.py
None

引数が1つだとあまり利便性が分かりにくいですが、数が増えていけばより管理しやすくなるんだと思います。

GitHub PagesでWebサイトを公開する方法

この記事では、GitHub Pagesを使ってWebサイトを公開する手順を紹介します。

GitHubアカウントさえあれば無料で公開できます。

サイト公開の手順は大きく分けて次の通りです。

今回の解説は、GitHubにアカウントを持っていることを前提としています。

すでにGihHubにソースをPushしている状態であれば、「4. 設定 > PagesでWebサイトの公開設定」のみをご覧ください。

1. GitHubリポジトリを作成

まずは公開するサイトのリポジトリGitHub上で作成します。

GitHubのマイページ→repositoryタブをクリックし、新規リポジトリを作成します。

リポジトリ作成画面でリポジトリ名を指定します。

Public(ソースコードが公開)、Private(非公開)はPublicを指定してください。

無料枠だとPublicでないとGitHub Pagesが使えないためです。

それぞれ設定し、「Create repository」をクリックすればリモートリポジトリが作成されます。

2. GitHub(リモートリポジトリ)と自分のPCのリポジトリを紐付け

上記で作成したリモートリポジトリに、自分のPCのリポジトリを紐付け、Pushします。

リモートリポジトリを新規作成した際に表示されるコマンドを、紐付けたいディレクトリで入力すればOKです。

# git初期セットアップ
git init
git commit -m "first commit"
git branch -M main
git remote add origin git@github.com:{リポジトリ名}
git push -u origin main

上記コマンドでリポートリポジトリと紐付け&Pushまでできます。

これができたら、ブランチを切ってサイトのコーディングを行います。

3. ソースコードGitHubにPush

ローカルでコーディングができたら、リモートリポジトリにPushします。

# 変更内容を全てステージング
git add .
# コミット
git commit -m 'コメント'
# リモートリポジトリにPush
git push origin main

mainブランチ以外で作業してPushする場合は、git push origin {ブランチ名}でリモートリポジトリにも同名のブランチが作成・Pushされます。

4. 設定 > PagesでWebサイトの公開設定

リモートリポジトリ(GitHub)にソースコードをPushできたら、最後にGitHub Pagesの設定です。

リポジトリページの「Setting」タブをクリックします。

左サイドバーの「Pages」をクリックしてください。

「Branch」設定エリアで公開したいブランチを選び、パスは「/(root)」のまま、「save」をクリックするとWebサイトが作成されます。

次のキャプチャのように、サイトURLが表示されればOKです。 「Visit site」をクリックしてWebサイトを見てみましょう。

URLが表示されるまで少し時間がかかります。しばらく経ったらページを再読み込みしてください。

最後に

GitHub Pagesはほんの数分で全世界に自分のWebサイトを公開できる便利な機能です。

ポートフォリオの公開などに便利だと思いました。 無料で利用できるので、ぜひ試してみてください。

セマンティックHTMLでマークアップを書きたい

セマンティックHTMLとは、要素の目的や役割に応じてHTMLのタグを使い分けることを言います。

ただ見た目を整えるだけなら全て<div>で作っても良いですが、見出しや文章の区切りなど、ドキュメントの構成を正しく伝えるためにはHTMLのセマンティック要素を使う必要があります。

例えば、最上位の見出しは<h1>、ナビゲーションは<nav>、文章のセクションは<section>で表すなどです。

セマンティック要素はおよそ100もあるようですが、その中でもずっと使い方が曖昧だったセクショニング・コンテンツと呼ばれる次の4つの要素についてまとめたいと思います。

  • section
  • article
  • aside
  • nav

そもそもなぜセマンティックHTMLで書く必要があるのか

セクショニング・コンテンツの使い方の説明の前に、そもそもセマンティックHTMLがなぜ重要かを、以下の3つの観点から紹介します。

  1. SEO対策
  2. Webアクセシビリティ
  3. コードの保守性

1. SEO対策

検索エンジンがWebサイトを探索する際、HTMLタグを参考にします。

セマンティックHTMLで構造的に正しいマークアップがされていると、クローラーがそのサイトを理解しやすくなり、結果的に検索順位の向上につながります。

2. Webアクセシビリティ

目の不自由なユーザーがWebサイトを操作する際、スクリーンリーダーと呼ばれる読み上げソフトを利用します。

適切なマークアップは、それらのユーザーが必要なコンテンツにアクセスするサポートをしてくれます。

3. コードの保守性

Webサイトはリリース後に何度も修正や更新が行われます。

その際、セマンティックHTMLでマークアップしていると、コードを見ただけで「この部分はどんな役割を表現しているのか」がすぐに理解でき、開発スピードが上がります。

developer.mozilla.org

セクショニング・コンテンツの役割と使い方

ここからは、4つのセクショニング・コンテンツについて詳細をまとめます。

以下の書籍を参考にしています。セクショニング・コンテンツ以外のHTMLタグへの理解も深まるのでおすすめです。

武器になるHTML - 柴田 宏仙

1. section

ページの章や節、項など自立したセクションを表します。

また<h1><h6>マークアップした階層を、より明確にするために使われます。

そのため、<section>には1つ以上の見出しタグが必要です。

<section>
    <h2>旅行先を選ぶ</h2>
    <p>目的地をお選びください。</p>

    <section>
      <h3>アジア</h3>
      <p>...</p>

      <section>
        <h4>東南アジア</h4>
        <p>...</p>
      </section>

      <section>
        <h4>南アジア</h4>
        <p>...</p>
      </section>
    </section>

    <section>
      <h3>ヨーロッパ</h3>
      ... 省略
    </section>
  </section>

2. article

マークアップした範囲を他から切り離しても、独立したコンテンツとして成り立つ場合に使います。

ブログ記事やニュース記事、ユーザーのコメントなど、個別に配信や再利用することを意図したコンテンツです。

<article>
    <h2>行ってよかった旅行先ベスト3</h2>
    <p><time datetime="2023-11-21">2023.11.21</time></p>

    <p>過去当社を利用されたことのあるお客様50名に聞いた、行ってよかった国・地域を紹介します。</p>
        ...省略

    <p>この記事を書いた人:xx支店店長</p>
</article>

<article>入れ子にする場合、内側の<article>は外側と関連するコンテンツになります(記事に対するコメントなど)。

<article>
    <h2>行ってよかった旅行先ベスト3</h2>
    <p><time datetime="2023-11-21">2023.11.21</time></p>

    <p>過去当社を利用されたことのあるお客様50名に聞いた、行ってよかった国・地域を紹介します。</p>
        ...省略

    <p>この記事を書いた人:xx支店店長</p>

    <section>
      <h3>コメント</h3>
      <article>
        <h4>タイはおすすめ</h4>
        <p>投稿者: Aya</p>
        <p><time datetime="2023-11-22 12:00">20分前</time></p>
        <p>この記事を読んでタイに行ってきました!</p>
      </article>
    </section>
  </article>

個人的に<section><article>の使い分けがややこしいと感じましたが、次のような基準で判断すると良いそうです。

  • section:サイトの話題を構成する一部
  • article:ブログやSNSで投稿した場合、それだけで1つのコンテンツとして成り立つ

Webサイトによくある「About(〇〇について)」「Contact(お問い合せ)」「Feature(特集)」など、ページを構成する1要素は<section>アーカイブの1記事などは<article>を使うと良さそうです。

3. aside

サイドバーなど、メイン要素から切り離せる補足情報や余談、広告などに使います。

4. nav

グローバルナビゲーション、パンくずリスト、目次などに利用します。

<nav>は複数指定可能ですが、主要なナビゲーション1つのみに<nav>を使うことが推奨されています。

なぜなら、<nav>はスクリーンリーダーでナビゲーションのランドマークと読み上げられ、ユーザーのページ移動の目印となります。

<nav>が複数あると区別がつきにくく、ユーザーの混乱を招く可能性があるからです。

そのため、フッターによくある利用規約やプライバシーポリシーなどは<nav>で囲む必要はありません。

以上、セマンティックHTMLのざっくりとしたまとめと、セクショニング・コンテンツの使い方の紹介でした。

私もまだまだ正しいマークアップができていないので(特にWebアクセシビリティの理解はほぼないです)、これからも学習を続けたいと思います!

Webアプリをdocker化する方法を紹介します

この記事では、railsプロジェクトをdocker化してブラウザで動作確認できるようにするまでの方法を紹介します。

1. GitHubからクローン

プロジェクトがGitHubにある場合はクローンします。

git clone {リポジトリURL}

2. dockerコンテナ起動に必要なファイルの準備

Dockerfile、docker-compose.ymlをプロジェクト直下に新規作成します。

Dockerfile

FROM ruby:3.2.2
RUN apt-get update && apt-get install -y \
    build-essential \
    libpq-dev \
    nodejs \
    yarn
WORKDIR /myapp
COPY Gemfile Gemfile.lock /myapp/
RUN bundle install

簡単なコマンド解説です。

コマンド 説明
FROM ruby:3.2.2 DokerhubからRubyのイメージを取得
RUN apt-get update... railsプロジェクトに必要なソフトウェアをコンテナにインストール
WORKDIR /myapp コンテナのホームディレクトリをmyapp/に指定
COPY Gemfile Gemfile.lock /myapp/ Railsプロジェクトに必要なパッケージを記載したGemfileをコンテナにコピー
RUN bundle install COPY...でコンテナにコピーしたGemfileからパッケージをインストール

docker-compose.yml

version: '3'
volumes:
  db-data:

services:
  web:
    build: .
    command: bundle exec rails s -p 3000 -b '0.0.0.0' # docker-compose upで実行されるコマンド
    ports:
      - "3000:3000" # localhost:3000でブラウザ表示
    volumes:
      - ".:/myapp" # カレントディレクトリをコンテナの/myappにマウント
    environment:
      - "POSTGRES_PASSWORD=postgres"
    tty: true # コンテナ内でbash操作するため
    stdin_open: true # コンテナ内でbash操作するため
    depends_on:
      - db

  db:
    image: postgres:12
    volumes:
      - "db-data:/var/lib/postgresql/data" # DBデータをdocker volumeのdb-dataにマウント
    environment:
      - "POSTGRES_PASSWORD=postgres"

3. データベース設定

config/database.ymlにDB接続情報を追加します。

# ...
default: &default
  adapter: postgresql
  encoding: unicode
# 以下を追加
  host: db
  user: postgres
  port: 5432
  password: <%= ENV.fetch("POSTGRES_PASSWORD") %>

passwordはdocker-compose.ymlenvironmentで指定しているものです。

4. コンテナを起動

以下のコマンドを実行し、コンテナを起動します。

docker-compose up

上記により、イメージができていない場合もイメージビルドからコンテナ作成・起動まで実行できます。

ただ、この時点ではコンテナのDBが作成されていないので、 http://localhost:3000 にアクセスしてもエラーが表示されます。

5. DB作成

dockerコンテナのweb、db(上記のdocker-compose.ymlで記載したサービス)がどちらも起動中であることを確認したら、ターミナルの別タブを開いてコンテナに対してDB作成・マイグレーションのコマンドを実行します。

# DB作成
docker compose exec web rails db:create
# マイグレーション
docker compose exec web rails db:migrate

上記が正常に完了したら、再度 http://localhost:3000 にアクセスしてみてください。

プロジェクトのトップページが表示されたらOKです。

最後に

開発環境の構築はPCの環境によって様々なエラーが発生してしまいますが、dockerを使えばチームで簡単に同じ環境を共有・構築できます。

今後も新しい言語やフレームワーク、プロジェクトを自分のPCで構築する機会があれば、積極的にdockerを使っていきたいと思いました。

既存プロジェクトのdocker化の参考にしていただければ幸いです。

Linux 基本コマンドまとめ

今回は、Linux の基本コマンド 18 個の使い方をまとめてみました。

Linux コマンドの使い方

cd

cd(change directory)は、現在いるディレクトリを変更できるコマンドです。移動先のディレクトリを指定します。

cd [ディレクトリ名]

/tmpディレクトリに移動

cd /tmp

何も指定しなければホームディレクトリに移動

cd

pwd
/Users/macbookpro # ホームディレクトリ

pwd

pwd(print working directory)は、自分が現在どの位置にいるのかを表示します。

pwd
/Users/macbookpro/Desktop

現在、/Users/macbookpro/Desktopディレクトリにいることがわかります。

ls

ls(list)は、ファイル名やディレクトリを指定して情報を取得できるコマンドです。

ディレクトリを指定した場合はそのディレクトリの中にあるファイル・ディレクトリ一覧を表示します。

ls [オプション] [ファイル名 or ディレクトリ]

カレントディレクトリの全てのファイル・ディレクトリを表示

ls
bye-world.js   hate.txt       hello          world-hello.ts
ha.py          hatena.md      hello-world.js

test1 ディレクトリの一覧を表示

ls test1
hello.txt

ファイル名を指定すると、その指定した名前のファイルのみを表示できます。

これを使うと、ワイルドカード(*や?)で特定の文字列や拡張子を含むファイルのみを表示することもできます。

ファイル名にhelloの文字列が含まれるファイルのみを表示

ls *hello*
hello          hello-world.js          world-hello.ts

拡張子が.jsのファイルのみを表示

ls *.js
bye-world.js   hello-world.js
オプション 説明
-a 隠しファイルも含めて全て表示
-l ファイルの詳細(ファイルタイプ、パーミッションなど)も表示
-r 逆順に並び替えて表示
-t 更新時間順に並び替えて表示

mkdir

mkdir(make directory)は、ディレクトリを作成するコマンドです。

mkdir ディレクトリ名

カレントディレクトリに test1 ディレクトリを作成

mkdir test1

test1/test2/test3など下位のディレクトリを一度に作成したい場合、-pオプションが必要です。(ディレクトリを作る際はその上位層ができていないと作成できない制約があるため)

mkdir -p test1/test2/test3

rmdir

rmdir(remove directory)は、ディレクトリを削除するコマンドです。

中身が空である時のみディレクトリを削除できます。

rm ディレクトリ名

test1 ディレクトリを削除

rmdir test1

-pをつけると、指定した階層までのディレクトリを一括削除できます。

rmdir test1/test2

中にファイルなど存在している場合にそのディレクトリごと削除したい場合、rm -rを使います。

rm -r test2

cat

cat は、ファイルの内容を表示するコマンドです。

cat ファイル名

hello.txt の中身を表示

cat hello.txt
hello world!!!
オプション 説明
-n 行番号を表示

less

less は、ファイルの内容を表示するコマンドです。

cat コマンドの場合、ファイルの中身が一度に全て表示されるため、ファイルの行数がたくさんあると表示が流れてしまいます(上にスクロールすると見れますが)。

less はファイルの中身の一部を表示して、残りはスペースを押して確認できます。

less hello.txt

【ページ操作】

操作 説明
スペース 次のページへ進む
b 前の一画面に戻る
f 次の一画面に進む
/単語 単語を検索(n キーで検索結果をジャンプ)
q 表示を終了

行数が多いファイルや、ファイルの上の方だけ確認したい場合は less の方が便利かもしれません。

tail

tail はファイルの終わり部分のみを表示するコマンドです。オプションで「末尾から n 行」を指定できますが、指定しない場合は 10 行を表示します。

tail [オプション] ファイル名

末尾から 5 行を表示

tail -n 5 text.txt
オプション 説明
-n 行 末尾から指定した行を表示
-c バイト 末尾から指定したバイト分を表示

touch

touch は空のファイルを新規作成するコマンドです。

touch new-hello.js

すでに存在しているファイル名を指定した場合、そのファイルの最終更新時間が変更されます。

ls -l hello.txt
-rw-r--r--  1 macbookpro  staff    15B Dec 21 13:04 hello.txt

touch touch hello.txt
ls -l hello.txt
-rw-r--r--  1 macbookpro  staff    15B Dec 21 16:31 hello.txt

rm

rm(remove)はファイルを削除するコマンドです。ディレクトリを削除したい場合はオプション-rが必要です。

rm [オプション] ファイル名

hello.txt を削除

rm hello.txt

複数ファイルを指定して削除できます。

rm hello.txt world-hello.ts

test1 ディレクトリを削除(ディレクトリ内の全てのファイル・ディレクトリが削除される)

rm -r test1/
オプション 説明
-i 実行前に確認する
-f 強制的に処理を実行
-r ディレクトリを削除

mv

mv(move)はファイル・ディレクトリを移動させるコマンドです。移動先を存在しない名前に指定した場合、ファイル名(ディレクトリ名)を変更できます。

mv [オプション] 移動元ファイル 移動先ファイル

hello.txt を test1 ディレクトリに移動

mv hello.txt test1

hello.txt のファイル名を hello2.txt に変更

mv hello.txt hello2.txt
オプション 説明
-i 実行前に確認する
-r 強制的に処理を実行

cp

cp(copy)はファイル・ディレクトリを複製するコマンドです。

コピー元のファイルとコピー先(新しいファイル名)を指定します。

cp [オプション] コピー元 コピー先

hello.txt を複製した new-hello.txt を作成

cp hello.txt new-hello.txt

コピー先のファイル名がすでに存在する場合、コピー先のファイルが上書きされるので注意が必要です。

hello.txt を bye ディレクトリに複製

cp hello.txt bye/

ls bye/
hello.txt # 複製されたファイルができる

ディレクトリを複製する場合はオプション-rをつけます。

ディレクトリの中にあるファイル・ディレクトリ全てが複製されます。

cp -r test1/ test2/
オプション 説明
-i 処理を実行する前に確認する
-r ディレクトリをコピーする
-p 元ファイルの情報を保持したままコピー

ln

ln(link)は、ファイルやディレクトリのリンクを作成できる機能で、リンク元ファイルとリンク先ファイルを指定します。

リンク先を削除しても元のファイルには影響ありません。

ln 元ファイル名 リンク先

リンクにはハードリンクとシンボリックリンクがあります。

  • ハードリンク:ファイルの実体を共有する。元のファイルが削除されてもアクセスできる。
  • シンボリックリンクリンク元の場所を示すもので、元のファイルが削除されるとリンクが機能しなくなる(ショートカットのようなもの)。

シンボリックリンクを作成する場合、オプションに-sをつけます。

ハードリンクを作成

ln test.txt test-link.txt

シンボリックリンクを作成

ln -s test.txt test-link.txt

find

find は、ファイルがどのディレクトリに存在するかを検索するコマンドです。

find 検索場所 [オプション] 検索対象

カレントディレクトリにある hello から始まる名前のファイルを探す

find ./ -name hello.*

ファイルの拡張子が.json のファイルを探す

find ./*.json -type f

※ファイルタイプ

今日アクセスした、拡張子が.json のファイルを探す

find ./*.json -atime 0

0 が今日、1 が昨日、2 が一昨日…というように、数値が「n 日前」になります。

また、「-1」などマイナスをつけると「n 日以内」、「+2」など+をつけると「n 日前以前(2 日前より前)になります。

昨日更新した拡張子が.json のファイルを探す

find ./*.json -mtime 1 # -mtimeは更新日で探すオプション

拡張子が.json で中身が空のファイルを探す

find ./*.json -empty
オプション 説明
-name ファイル名(ディレクトリ名)を指定して検索。大文字と小文字を区別する
-iname 大文字・小文字を区別しない
-type ファイルタイプを指定
-atime ファイルにアクセスした日
-mtime ファイルの更新日
-empty 空のファイル・ディレクト

chmod

chmod(change mode)は、ファイルの権限を変更できるコマンドです。

ファイル所有者、ファイル所有グループ、その他ユーザーごとに読み・書き・実行権限を指定できます。

実行権限の指定方法は、

  1. モードの変更をカンマ区切りで指定
  2. 3 桁で各ユーザーの権限を指定

の 2 種類あります。

1. モードの変更をカンマ区切りで指定

chmod 変更対象 変更方法 変更内容 対象ファイル

変更対象、変更方法、変更内容はそれぞれ以下の中から指定します。

【変更対象】

変更対象 意味
u 所有ユーザー
g 所有グループ
o その他のユーザー
a 全て

【変更方法】

変更方法 意味
= その内容に設定
+ 追加
- 取り消し

【変更内容】

変更内容 意味
r 読み取り
w 書き込み
x 実行

例えば、「所有ユーザーに実行権限を付与」は次のようになります。

chmod u+x test.txt

複数指定ももちろん可能です。カンマ区切りで指定します。

# 複数対象に権限を付与(取り消し)
chmod u+rw-x,go+r-wx test.txt

2. 3 桁で各ユーザーの権限を指定

権限を数値 3 桁で指定する場合、所有ユーザー、所有グループ、その他ユーザーの順で次の表の合計値を指定します。

パーミッション 数値
r 4
w 2
x 1
# rwxr-xr-xに変更
chmod 755 test.txt

# rw-r—r—に変更
chmod 644 test.txt

# r————に変更
chmod 400 test.txt

chown

chown (change owner)は、ファイルの所有者を変するコマンドです。

ユーザーとグループを変更するには、root ユーザーである必要があります。

chown [オプション] ユーザーorグループ 変更対象

test.txt もユーザー所有権を root に変更

chown root test.txt

test.txt のユーザー・グループ所有権を root に変更

# 「ユーザー:グループ」で変更できる
chown root:root test.txt

ディレクトリを変更対象とする場合は、オプション-Rをつけます。

chown -R root test1/

ps

ps は、現在実行されているプロセス一覧を表示するコマンドです。プロセス ID、端末、CPU 時間、コマンド名などが表示されます。

ps [オプション]

プロセスとは、OS 上で実行中のプログラムのことです。プログラムは CPU やメモリのコンピューターリソースを消費して動いています。安定動作時(アイドリング状態)のプロセス数がどれくらいなのかを把握するのは管理上重要です。

実行中のプロセスをリスト形式で表示

ps aux
オプション 意味
-A, -e 全てのプロセスを選択
a 端末を持つ全てのプロセスを表示
x 端末を持たない全てのプロセスを表示
r 実行中のプロセスのみを表示
-p プロセス ID を指定して表示
u 見やすいフォーマットで表示
-l 長いフォーマットで表示
e コマンド名の後に環境を表示

kill

kill は、実行中のプロセスを終了させるコマンドです。異常な動作をしていたり、PC に負荷をかけているプロセスを止める際に使用します。

kill [オプション] プロセスID

最後に

今まで何度か Linux コマンドを使っていましたが、改めて勉強すると知らない使い方や便利なオプションをたくさん知れて、非常に勉強になりました。

Linux は一度身につければずっと使える知識なので、今後も便利な使い方などを積極的に学んでいきたいです。

ご覧いただきありがとうございました!

環境変数PATHの確認・追加・削除

この記事では、zshmacOSでパスを確認・追加・削除する方法を紹介します。

当方の環境は次の通りです。

  • OS:macOS Monterey 12.7.6
  • Shell:zsh

※Shellの種類はターミナルで以下を入力すると確認できます。

$ echo $SHELL
# 結果
/bin/zsh

「パスを通す」とは

「パスを通す」とは、コマンドの実行ファイルが存在するディレクトリのフルパスを環境変数PATHに登録(エクスポート)することを言います。

パスを通していると、コマンドを叩くことで処理が実行されるようになります。

例えば、ファイルを移動させるmvコマンドは/bin/mvにあります。

$ which mv
/bin/mv

このmvコマンドをフルパスで入力しなくても実行できるのは、mvが存在する/binのパスが通っている(環境変数PATHに登録されている)からです。

環境変数PATHは、echo $PATHで確認できます。

$ echo $PATH
/Users/{user}/.nodebrew/current/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

/binが登録されているのがわかります。そのため、mvコマンドは/bin/mvと打たなくても実行できるのです。

パスの通し方

パスを通すためには、zshrc(zshの設定ファイル)にパスを追加します。

vim(vi)コマンドでzshrcを編集できます。

$ vim ~/.zshrc

export PATH=追加したいコマンド検索パス:$PATHで追加できます。

例えば、/usr/bin/optを追加したい場合、次のようになります。

$ export PATH=/usr/bin/opt:$PATH

上書き保存をしたら、変更を反映します。

$ source ~/.zshrc

これで再度echo $PATHでパスが通っているか確認してください。

変更されていない場合、ターミナルを再起動すると反映されます。

不要なパスを削除

不要なパスを削除するのは、zshrcを編集すれば良いだけです。

# .zshrcを開く
$ vim ~/.zshrc

exportしている箇所をコメントアウトまたは削除してください。

# export PATH=$HOME/.nodebrew/current/bin:$PATH

最後に、変更を反映します。

$ source ~/.zshrc

これでパスの削除が完了です。