LaravelにTailwind CSSをインストールする

基本的には公式の手順に従っていきます。公式の手順とは異なり、sail環境で実行するため、すべてのコマンドにsailがついています。また、Viteを使います。

Tailwind CSSをインストールする

すでにnpm installしてある状態で、次のコマンドを実行します。

$ sail npm install -D tailwindcss postcss autoprefixer
$ sail npx tailwindcss init -p 

コマンドを実行すると、tailwind.config.jspostcss.config.jsが作成されます。

テンプレートのパスを設定する

tailwind.config.jsを編集してテンプレートファイルのパスを追加します。

修正前のtailwind.config.jsは次のようになっています。

/** @type {import('tailwindcss').Config} */
export default {
  content: [],
  theme: {
    extend: {},
  },
  plugins: [],
}

contentを次のように編集します。

/** @type {import('tailwindcss').Config} */
export default {
  content: [
      "./resources/**/*.blade.php",
      "./resources/**/*.js",
      "./resources/**/*.vue",
  ],
  theme: {
    extend: {},
  },
  plugins: [],
}

公式の手順どおりに編集していますが、Vue.jsを使わないのであれば最後の1行は不要です。

CSSファイルにTailwindディレクティブを追加する

@tailwindディレクティブをresources/css/app.cssに追加します。

@tailwind base;
@tailwind components;
@tailwind utilities;

ビルドプロセスを開始する

すでにnpm run devを実行中の場合は一度停止してから再度実行してください。

$ sail npm run dev

これでインストール作業は完了し、Tailwind CSSが使用可能な状態になります。

Tailwind CSSを使ってみる

では実際に使ってみましょう。

welcome.blade.phpを修正して機能しているかを確認します。

まずは、<head>タグに@vite('resources/css/app.css')を埋め込みます。

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
      ...
      @vite('resources/css/app.css')
      ...
    </head>

これで使用する準備が整いましたが、welcome.blade.phpの場合、すでに<style>タグでTailwind CSSが埋め込まれているので、これをコメントアウトしておきます。

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
    <head>
        ...
        <!-- Styles -->
        <!-- style>
            /* ! tailwindcss v3.2.4 | MIT License | https://tailwindcss.com */ ...
        </style -->
  </head>

この修正は他のBladeファイルでは不要です。

では実際に使ってみます。

公式サイトの手順にあった<h1>タグを記述します。

        <h1 class="text-3xl font-bold underline">
            Hello World!
        </h1>

画面を表示してみて、

のように表示され、デベロッパーツール上でも

のようにapp.cssに定義されたTailwind CSSのクラスが適用されていることが確認できたら正常にインストールできています。

mambaを使ってパッケージのインストールを高速化しよう(conda installの高速化)

conda installを何気なくやるとかなり待たされることがあります。この待ち時間を減らすためにはmambaを使用することが解決策の一つとなります。

インストールが全然始まらない

pandasparquetを扱いたくてconda installpyarrowをインストールしようとしましたが、インストールが全然始まりませんでした。

 $ conda install pyarrow
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): | WARNING conda.models.version:get_matcher(546): Using .* with relational operator is superfluous and deprecated and will be removed in a future version of conda. Your spec was 1.8.0.*, but conda is ignoring the .* and treating it as 1.8.0
WARNING conda.models.version:get_matcher(546): Using .* with relational operator is superfluous and deprecated and will be removed in a future version of conda. Your spec was 1.9.0.
*, but conda is ignoring the .* and treating it as 1.9.0                                                                                                                           done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: |

conda installに時間がかかる原因としては以下が考えられます。

  1. 依存関係の解決: condaはパッケージの依存関係を非常に厳格に解決します。そのため、多くのパッケージや複雑な環境でのインストールでは、この解決プロセスが時間を要することがあります。
  2. サーバーの応答速度: 利用しているcondaのリポジトリサーバーの応答速度やネットワークの状態によっては、パッケージのダウンロードに時間がかかることがあります。
  3. インストールするパッケージのサイズ: 大きなパッケージや多数のパッケージをインストールする場合、当然ダウンロードやインストールに時間がかかります。

この問題を解決するためには以下のような対策が考えられます。

  • 特定のチャンネルを指定
  • mambaの利用
  • 環境を最小限に保つ
  • パッケージキャッシュのクリア

今回はこの中から、お手軽で高い効果のある「mambaの利用」を適用していきます。

mambaのインストール

まずはmambaをインストールします。

conda install -c conda-forge mamba

conda installにかかる時間を減らす一つのテクニックとしてチャネルを指定する方法があります。ただ、mambaをチャネル指定なしでインストールしてもそれほど時間がかからなかったので、チャネル指定がなくても大丈夫だと思います。

他にチャネルの指定する方法はあるので、conda-forgeへのリンクを貼っておきます。

condaのキャッシュをクリアする

念のためcondaのキャッシュをクリアしておきます。

$ conda clean -a
Will remove 411 (631.3 MB) tarball(s).
Proceed ([y]/n)? y

Will remove 1 index cache(s).
Proceed ([y]/n)? y

Will remove 83 (826.7 MB) package(s).
Proceed ([y]/n)? y

There are no tempfile(s) to remove.
There are no logfile(s) to remove.

何度か質問されるのでいずれの質問にもyを回答します。

mambaを使ってインストールする

では先ほど全然インストールが始まらなかったpyarrowmambaでインストールしていきます。

$ mamba install pyarrow 

Looking for: ['pyarrow']

conda-forge/osx-arm64                                6.7MB @  13.6MB/s  0.5s
conda-forge/noarch                                  12.4MB @  23.9MB/s  0.5s

・・・

Confirm changes: [Y/n] y

・・・

Downloading and Extracting Packages

Preparing transaction: done
Verifying transaction: done
Executing transaction: done

処理時間が格段に短くなるものそうですが、待ち時間が短縮されるので体感的にも早く感じられ、ストレスが軽減されるのがよいですね。

まとめ

データ分析や機械学習の作業でcondaを使ってインストール作業を行う場合はmambaコマンドを使った方が素早く作業を進められます。

外部プログラムをインストールする訳ではなく、conda installmambaをインストールできるので、ノックアウトファクターがほぼないので是非試してみてください。

asdfでmacOSにTerraformをインストールする

Terraformを使う必要があったので、asdfでTerraformをインストールしました。

Terraformのインストール

他の手段もありますが、バージョンアップをすることが多いため、asdfを使ってインストールします。

Terraformプラグインの追加

plugin addコマンドでTerraformプラグインを追加します。

$ asdf plugin add terraform
updating plugin repository...HEAD is now at b03baaa feat: add asdf-oapi-codegen plugin (#864)

plugin listコマンドで追加済みのプラグインをリストし、terraformがあれば追加されています。

$ asdf plugin list
nodejs
python
terraform
yarn

Terraformをインストールする

list allコマンドでTerraformの利用可能なすべてのバージョンをリストします。

$ asdf list all terraform
・・・
1.5.0
1.5.1
1.5.2
1.5.3
1.5.4
1.5.5
1.5.6
1.6.0-alpha20230719
1.6.0-alpha20230802
1.6.0-alpha20230816

今回は1.5.6をインストールすることにします。

installコマンドでバージョンを指定してインストールします。

$ asdf install terraform 1.5.6
Downloading terraform version 1.5.6 from https://releases.hashicorp.com/terraform/1.5.6/terraform_1.5.6_darwin_arm64.zip
Skipping verifying signatures and checksums either because gpg is not installed or explicitly skipped with ASDF_HASHICORP_SKIP_VERIFY
Cleaning terraform previous binaries
Creating terraform bin directory
Extracting terraform archive

ログを見ても適切なバイナリ(darwin_arm64)が使用されていることがわかりますが、あとでバージョンを確認したときにもう一度確認しておきましょう。

今回インストールしたバージョンは普段使いするバージョンですので、globalコマンドを使ってグローバルに使用できるようにします。

$ asdf global terraform 1.5.6

複数のプロジェクトを担当していて、プロジェクトによって使用するバージョンが異なる場合は、localでプロジェクトごとにバージョンを制御できるようにしてください。

インストールできたことを確認するために-vオプションを指定してバージョンを確認します。

$ terraform -v
Terraform v1.5.6
on darwin_arm64

インストール時に指定したバージョンで、バイナリの種類も適切であることを確認できました。

まとめ

Terraformのバージョン管理の手段としては、tfenvが有名です。

こちらでもいいのですが、せっかくasdfをインストールしているので、asdfを使ってインストールしてみました。待ち時間もほとんどなくサクッとインストールすることができました。

Yarnをインストールする(v3系)

過去にYarnを使っていましたが、最近は全然使用していませんでした。ふと使おうかと思ったのですが、インストール方法がだいぶ変わっており、初めてインストールを行う人やしばらくぶりにインストールをしようとすると手順に戸惑いそうだったので、基本的なインストール手順をまとめました。

前提条件

まずは記事執筆時点でのLTSバージョンである18.16.0を使用してインストールを行います。

$ node -v
v18.16.0
$ npm -v
9.6.6

npmについても執筆時点の最新バージョンにアップデートしています。

手順はmacOS上で確認していますが、特にシェルコマンドなどは使っていないので、どの環境でも同様の手順でインストール可能です。

また、インストール手順は公式の手順に準じて進めます。

公式の手順で十分な方はそちらを参照してください。

corepackを有効化する

corepacknpmyarnなどのパッケージマネージャを管理するツールです。デフォルトでは有効になっていないため有効します。

$ corepack enable

以前はnpmコマンドでインストールしていましたが、今はcorepackでインストールします。npm install yarnでもインストールできるのですが、v1系がインストールされるため、最新バージョンをインストールしたい場合はcorepackコマンドを使用する必要があります。

yarnをインストールする

次にcorepack を使ってyarnをインストールします。執筆時点では3.5.1が最新版のようですので、3.5.1をインストールすることにします。

yarnリポジトリはv1系のリポジトリとなっているのでご注意ください。

corepack prepareコマンドでインストールと有効化を行います。

$ corepack prepare yarn@3.5.1 --activate
Preparing yarn@3.5.1 for immediate activation...

Node.jsをasdfでインストールしている場合は、追加で以下のコマンドを実行してyarnコマンドを使用できるようにします。

$ asdf reshim

指定したバージョンがインストールできていることを確認します。

$ yarn -v
3.5.1

これでインストールが完了しました。

package.jsonを作成する

ついでにyarnコマンドを使ってpackage.jsonを作成してみましょう。

$ yarn init -y
{
  name: 'test',
  packageManager: 'yarn@3.5.1'
}

corepackの管理下にあるパッケージマネージャを使ってpackage.jsonを作成すると、packageManagerというプロパティが追加されるようになります。これがあるとyarn以外のパッケージマネージャを使用するとエラーが出るようになります。

モバイルバージョンを終了