2020/05/26

awsコマンドの返り値はJSONで返ってきますが、見やすく整形するには色々とコマンドを記述しなければいけません。

そこでフィルタプログラム jq を利用すると少しだけ整形が楽になります。

jq をインストール

Homebrew で jq をインストールします。


$ brew install jq

AWS EC2のインスタンス一覧を取得

jEC2のインスタンスを「インスタンスID」「タグ」「インスタンスタイプ」で一覧表示してみます。
その際、jq のオプション -c(--compact-output)で圧縮出力します。


aws ec2 describe-instances | jq -c '.[][].Instances[]
         | [.InstanceId,[.Tags[] | select(.Key == "Name").Value][], .InstanceType]'

結果


["i-0cxxxxxx","Linux2","t2.micro"]
["i-01xxxxxx","cloud9-sample","t2.micro"]

このようにパイプ(|)で連結させてフィルタリングします。

インデントを揃える

結果内容を揃える場合、Macの標準コマンド column を利用します。

その際、jq コマンドのオプションを -r(--raw-output)で生出力にします。


aws ec2 describe-instances \
         | jq -r \
         '.[][].Instances[] 
         | [.InstanceId,
         [.Tags[] | select(.Key == "Name").Value][],
         .InstanceType]
         | @tsv' \
         | column -t

結果


i-0cxxxxxx  Linux2         t2.micro
i-01xxxxxx  cloud9-sample  t2.micro

参考

jqとcolumnでAWS CLIの出力を見やすく整形する

軽量JSONパーサー『jq』のドキュメント:『jq Manual』をざっくり日本語訳してみました

 

  2020/05/25

プロジェクト作成

composer でプロジェクト名「laravel_app」を作成します。


$ composer create-project laravel/laravel laravel_app

Laravel のバージョンを確認しておきます。


Laravel Framework 7.12.0

UIパッケージをインストール

laravel_app に移動して、ComposerでLaravelのUIパッケージ laravel/ui をインストールします。


$ cd laravel_app
$ composer require laravel/ui

Reactをインストール

Reactを利用できるようにスカフォールドをインストールします。


$ php artisan ui react
//Authを利用する場合
$ php artisan ui react --auth

npmでインストール&ビルド(開発)

package.jsonに記述された内容で依存パッケージをインストールとLaravel Mixでビルドします。


$ npm install
$ npm run dev

関連ファイルの監視

関連ファイルの変更を監視しておきます。


$ npm run watch

これでReactがインストールされたLaravelプロジェクト作成が完了しました。

ここで Laravelサーバを起動して確認してみましょう。

おなじみの Laravel の画面は表示されましたが、この画面ではReact の動作実装されていません。

Reactを確認する

Laravel で React をインストールするとあらかじめサンプルファイルが作成されています。

app.js

resources/js/app.js には Bootstrap と Reactコンポーネント「Example」が読み込まれています。


require('./bootstrap');
require('./components/Example');

Example.js

resources/js/components/Example.js には、Reactコンポーネント「Example」の中身です。
Reactでは、HTMLレンダリングにJSXを利用しますが、JavaScriptに直接HTMLタグを記述できる点で便利です。


import React from 'react';
import ReactDOM from 'react-dom';

function Example() {
    return (
        ...JSX...
    );
}

export default Example;
...

レイアウトファイルの修正

現状だと Reactコンポーネントは表示できないため、Laravelのレイアウトファイル「resources/views/welcom.blade.php」を修正します。

Laravelのmix()関数で app.jsを読み込んでいます。


<script src="{{ mix('js/app.js') }}"></script>

また、Exampleコンポーネントを表示する場合、HTMLタグにidを指定して呼び出します。


<div id="example"></div>

動作確認

もういちど、サーバを確認してみると今度は、Exampleコンポーネントを読み込んだ状態で表示されました。

  2020/05/25

Homebrewとは

HomebrewはMacのパッケージ管理システムです。

 

MacはGit、PHP、Ruby、Pythonといったアプリケーションが標準インストールされてますが、Macで開発環境を構築する場合、異なるバージョンで利用するケースが発生します。
そこでHomebrewを利用すると、Gitで管理されたパッケージをダウンロードして、インストール、アンインストールなど管理することができます。


最近ではDockerやクラウド開発の登場で Macに直接インストールすることも減りつつありますが、Dockerだけでは賄えない部分も多々あるので、いまだ必須のツールになっています。

参考

Homebrew - インストール

インストール

以前の記事ではrubyでインストールしていましたが、公式をみるとシェルスクリプトでインストールしています。
実際はGitでパッケージをダウンロードし、Ruby の gem で実行しているのでやっていること自体は変わりません。

ターミナルを開き、以下のコマンドを実行します。


$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

しばらくしてインストールが完了したら、バージョンを確認します。


$ brew --version
Homebrew 2.2.17
Homebrew/homebrew-core (git revision c87df; last commit 2020-05-22)

パッケージのインストール

試しに、ファイルダウンロードをするコマンド wget を brew でインストールしてみましょう。


$ brew install wget

インストールが完了したら、バージョンを確認します。


$ wget -V
GNU Wget 1.20.3 built on darwin18.7.0.
...

このようにHomebrewは Macで利用できないコマンドやアプリケーションを brew コマンドで管理します。

Cask でインストール

Cask は MacのGUIアプリ、フォント、プラグイン、その他オープンソースででないソフトウェアをインストールするときに利用します。

例えばブラウザアプリ「Firefox」を、Homebrewでインストールすることができます。


$ brew cask install firefox

Macのアプリケーションフォルダを確認するとFirefoxがインストールされているはずです。

 

PHPのインストール

Macのバージョンによっては、標準でインストールされているPHPのバージョンは異なります。
例えばLaravel 7.x をMac上で利用する場合、PHPのバージョン7.2.5以上が必要なため、別途インストールが必要です。

PHPパッケージの検索

PHPのインストールの前に、パッケージを検索してみます。


$ brew search php
==> Formulae
brew-php-switcher     php-code-sniffer      php@7.2               phplint               phpmyadmin            phpunit
php                 php-cs-fixer          php@7.3               phpmd                 phpstan

PHP7.3をインストール

php@7.3 パッケージがあるので、これをインストールします。


$ brew install php@7.3

PHPのパス設定

インストールが完了しましたが、現状はPHPの旧バージョンが有効のままです。

PHP7.3が利用できるようにパスの設定を ~/.bash_profile に記述します。


$ echo 'export PATH="/usr/local/opt/php@7.3/bin:$PATH"' >> ~/.bash_profile
$ source ~/.bash_profile

設定をすぐに反映するために .bash_profile を読み込むと、PHPのバージョンが変更されたことを確認できます。


$ php -v
PHP 7.3.18 (cli)

  2020/05/16

Matplotlib で3直線で囲まれた範囲を塗りつぶしをしてみます。

3直線の定義

まず、x の範囲を適当に設定し、3直線を定義します。


x = np.arange(0, 100, 0.1)
y1 = -x * (3/2) + 100
y2 = -x / 5 + 32
y3 = -x * (3/4) + 250 / 3

プロット


plt.plot(x, y1, label="y1: 3*x1 + 2*x2 >= 200")
plt.plot(x, y2, label="y2: x1 + 5*x2 >= 160")
plt.plot(x, y3, label="y3: 4*x1 + 3*x2 >= 250")

塗りつぶし

実際の塗りつぶしは、fill_between() 機能を利用します。

ですが、fill_between() は3式以上には対応していないため、2つのデータに落とし込む必要があります。

2式(データ)に落とし込む

numpy の maximum(), minimum() で2式の最大値または最小値を取得します。

まず y1  y2 のグラフのような条件下でデータ y4 を設定します。


y4 = np.maximum(y1, y2)

グラフを塗りつぶす

今度は y3, y4 を fill_between() と where パラメータで塗りつぶします。

グラフでもわかるように y4(y1, y2 条件のデータ) <= y3 となります。


ax = plt.axes()
ax.fill_between(
    x,
    y3,
    y4,
    where=y3 > y4,
    alpha=0.3,
    interpolate=True,
)

第1引数は、x軸の値、第2,3引数は2式のデータ、オプションとして where など設定します

もし、3式の交点がわあかっていれば、fill() を使って交点指定で塗りつぶしても良いかと思います。

  2020/05/15

線形最適化問題とは?

1次式のみで定義できる式から、ある条件(制約)をもとに問題の最適解を見つけることです。
2次以上の式や、離散的な変数(連続でない)に関しての問題は対象外となります。

目的関数と制約

問題を解決するには、目的関数(求めたい解の定義式)と、問題の制約(条件)を定義します。
問題定義の関数は、 最小化最大化の2種類あります。

例えば、生産するための最大利益、乗り換え案内などの最短経路を求めたりする問題です。

上記は3つの制約で、ある目的関数から最適解を求めたグラフ化です。
制約は(不等式)の不等号の向きで範囲が異なります。

 

PuLP とは

PuLP は COIN-OR プロジェクトで開発された線形最適化問題を解くための Pythonライブラリです。

Jupyter Notebook インストール

視覚的に確認するために、Jupyter Notebook をインストールします。
個人的には、Anaconda は入れたくないので pip3 でインストールします。


$ pip3 install jupyter

Pulp インストール


$ pip3 install pulp

Pulp の基本

決定変数

変数作成変数は、 LpVariable() で定義します。

  • 連続変数(実数値)
  • 0 or 1変数
  • 整数値

第1引数

「インスタンス名」で必須です。

第2引数

  • lowBound:変数の下限値(デフォルト:None)
  • upBound:変数の上限値(デフォルト:None)
  • cat:変数の種類(デフォルト:連続変数 = pulp.LpContinuous)

変数の利用例


x1 = pulp.LpVariable('x1', 0)
x2 = pulp.LpVariable('x2', 0) 

問題定義のモデル作成

目的関数と制約

目的関数を LpProblem() でインスタンスを作成し、制約を追加してきます。

最大化モデル作成


LpProblem(sense= LpMaximize)

最小化モデル作成


LpProblem(sense=LpMinimize)

ラベル付きの例


problem = pulp.LpProblem('最大化問題', sense=pulp. LpMaximize)

作成したインスタンスに、目的関数、制約の式を追加します。


problem = pulp.LpProblem('生産計画問題', sense=pulp. LpMaximize)
problem+= x1 + 2*x2, '目的関数 利益見込み'
problem+= x1 + 3*x2 <= 24, '原料制約'
problem+= 4*x1 + 4*x2 <= 48, '労働時間制約'
problem+= 2*x1 + x2 <= 22, '機会稼働制約'
problem

最適解の計算

定義した問題定義を実際に解くには、 solve() を利用しますが、戻り値は実際の解ではなく、成功フラグになります。


result = problem.solve()

実行結果のステータス

実行結果のステータスを確認するのに、 LpStatus() を利用します。


print(pulp.LpStatus[result])

ステータスの種類


{
 -3: 'Undefined',
 -2: 'Unbounded',
 -1: 'Infeasible',
 0: 'Not Solved',
 1: 'Optimal'
}

目的関数の最適値(最大・最小値)

目的関数の最適解は、 value(モデル.objective) で取得します。


print(pulp.value(problem.objective))

最適解を求める

解の取得

最適解を求めたら、解を取得します。
定義した決定変数を variables() 、それぞれの解を value(オブジェクト) で取得します。


for v in problem.variables():
    print(f’{v} = {pulp.value(v)}’)

結果


$ python3 2-1.py 
x1 = 6.0
x2 = 6.0

Jupiter Notebook

  2020/03/30

ペジネーションビューの書き出し

artisan コマンドで、ペジネーションビューをプロジェクト内に書き出します。


$ php artisan vendor:publish --tag=laravel-pagination

resources/views/vendor/pagination/ にページネーションのBladeファイルが作成されます。

あとで説明しますが、デフォルトは「bootstrap-4」で書き出されますが、ページネーションメソッドで他のBladeファイルを指定することができます。
よって、利用したいBladeファイルをカスタマイズしてください。

Eloquent モデルで取得

Eloquent モデルには、paginate()、simplePaginate() メソッドを利用できます。


$limit = 10;
$offset = 0;
$user = User::paginate($limit, '[*]', 'page', $offset);

AppServiceProvider に追加

AppServiceProvider::boot() でページネーションのBlade ファイル名を指定します。


    public function boot()
    {
        Paginator::defaultView('pagination::bootstrap-4');
        Paginator::defaultSimpleView('pagination::simple-bootstrap-4');
    }

Blade にページネーションを実装

Blade ファイルでは、Eloquent モデルデータの links() メソッドでページネーション表示できます。


{!! $user->links() !!}

また、Blade 側で明示的に指定することもできます。


{{ $paginator->links('pagination::bootstrap-4', ['key' => 'value']) }}

Eloquent のページネーションメソッドは以下を参照してください。

https://readouble.com/laravel/7.x/ja/pagination.html

  2020/03/30

node-sass をインストールする

CSSコンパイルは開発のみで利用するため、ローカル(devDependencies)にインストールします。


$ npm install node-sass --save-dev
//または
$ yarn install node-sass --dev

--save-dev はローカル(devDependencies)にインストールする npm コマンドオプションです。
yarn では --dev にあたります。(混乱しますが・・・)

ファイル構成

sass から css に書き出すディレクトリを構成します。

元ファイル(sass)

sources/sass/default.scss

書き出しファイル(css)

public/css/default.css

ファイル構成

npm を初期化してない場合は、新規作成します。


$ npm init

package.json

package.json の scripts に sass の設定を記述します。


"scripts": {
    "sass": "node-sass resources/sass/ --output public/css/ --output-style compressed --watch --source-map true"
}
  • compressed:css圧縮
  • --watch:監視設定(sass保存時に自動書き出し)
  • --source-map true: .css.map ファイルの書き出し/li>

CSSコンパイル


$ npm run sass

public/css/ に対象の cssファイルが書き出されます。

  2020/03/29

SQL が発行されるたびに Log ファサードを利用して SQLログを書き出してみます。

Laravel のLogファサードの仕様は以下を参照してください。

https://readouble.com/laravel/7.x/ja/logging.html

LogSqlServiceProvider の設定

プロバイダは、AppServiceProvider に登録しても良いですが、今回はカスタムで LogSqlServiceProvider を作成します。


$ php artisan make:provider LogSqlServiceProvider

app/Providers/LogSqlServiceProvider.php が作成されているのを確認します。

AppServiceProvider に登録

config/app.php の providers に LogSqlServiceProvider を登録します。


    'providers' => [
...
        App\Providers\LogSqlServiceProvider::class,
...
    ],

SQLログ処理を記述

app/Providers/LogSqlServiceProvider.php の register() に記述します。


namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\App;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;

class AppServiceProvider extends ServiceProvider
{
    const SQL_LOG_ENVIROMENT = [
        'local',
        'development',
    ];
....

    public function register()
    {
        if (in_array(App::environment(), self::SQL_LOG_ENVIROMENT)) {
            DB::listen(function ($query) {
                $sql = $query->sql;
                for ($i = 0; $i < count($query->bindings); $i++) {
                    $sql = preg_replace("/\?/", $query->bindings[$i], $sql, 1);
                }
                Log::channel('sql')->debug("SQL", ["time" => sprintf("%.2f ms", $query->time), "sql" => $sql]);                                                      
            });
        }
    }

App::environment() で現在の環境を取得し、任意に設定した SQL_LOG_ENVIROMENT の場合に、ログを書き出します。

環境による設定は、.env の boolean で設定しても良いかも知れません。

SQLログファイルパス設定

config/logging.php で設定でき、デフォルト「storage/logs/larave.log」となります。

Log::debug() の場合、デフォルトで single チャンネルで書き出されるため、Log::channel('チャンネル名')で、SQL用のログを設定します。
(内部的に、Illuminate\Log\LogManagerクラスで、driver() に設定される模様)


    'channels' => [
...
        'sql' => [
            'driver' => 'sql',
            'path' => storage_path('logs/sql.log'),
            'level' => 'debug',
        ],
...
    ],

またロガーは RFC 5424 の以下の8つのログレベルを提供しています。

  • emergency
  • alert
  • critical
  • error
  • warning
  • notice
  • info
  • debug

Logファサードは、最終的にPsr\Log\LoggerInterface を実装した Monolog\Logger を利用しています。

  2020/03/28

今回は、複数のコンテナを docker-compose を利用して起動してみます。

Docker/Kubernetes 実践コンテナ開発入門

を参考に、Jenkins のMaster、Slave で複数のコンテナを構築します。

Jenkins(Master)コンテナ作成

まず、Jenkins(Master)を以下の設定で作成します。

  • Dockerイメージ:Jenkinsci/jenkins:latest
  • ポートフォワーディング:8080 <==> 8080
  • 共有ボリューム:./jenkins_home <==> /var/jenkins_home

ポートフォワーディング、共有ボリュームは、左がホスト(Mac)、右がDockerの設定となります。

docker-compose.yml の設定


version: "3"
services:
  master:
    container_name: master
    image: jenkinsci/jenkins:2.142-slim
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home

このように、volumes を設定することで、Dockerのデータをホスト側と共有させて、永続化することができます。

docker-compose の起動

docker-compose.yml を作成したら、 --build でイメージ構築と同時に起動をします。


$ docker-compose up --build

Jenkinsのパスワードを控える

途中で、Jenkins の管理者パスワードが表示されるため、控えておきましょう。
忘れた場合は、Docker内の「/var/jenkins_home/secrets/initialAdminPassword」に記載されています。


...
master    | Jenkins initial setup is required. An admin user has been created and a password generated.
master    | Please use the following password to proceed to installation:
master    | 
master    | パスワード
master    | 
master    | This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
...

この時点で、ホスト側のルートにも「jenkins_home」ディレクトリが作成されます。

Docker側でSSH認証キーを作成

Jenkins(Master)コンテナ内で、SSH認証キーを作成します。

dockerコンテナに対して、シェルコマンドを実行します。


$ docker container exec -it コンテナ名 シェルコマンド

今回は、ssh-keygen を利用するので、


$ docker container exec -it master ssh-keygen -t rsa -C ""
Generating public/private rsa key pair.
Enter file in which to save the key (/var/jenkins_home/.ssh/id_rsa):        
Created directory '/var/jenkins_home/.ssh'.
Enter passphrase (empty for no passphrase): 
Enter same passphrase again: 
...
SHA256:SSHキー

すると、jenkins_home/.ssh/ に id_rsa、id_rsa.pub が作成されます。

docker-compose の停止

Jenkins(Slave)を設定するため、一旦、コンテナを停止します。


$ docker-compose down

Jenkins(Slave)コンテナ作成

Jenkins(Slave)を設定を行います。

docker-compose.yml の設定


version: "3"
services:
  master:
    container_name: master
    image: jenkinsci/jenkins:2.142-slim
    ports:
      - 8080:8080
    volumes:
      - ./jenkins_home:/var/jenkins_home
    links:
      - slave01

   slave01:
     container_name: slave01
     image: jenkinsci/ssh-slave
     enviloment:
       - JENKINS_SLAVE_SSH_PUBKEY=id_rsa.pub のキー

enviloment は環境変数の設定で、「JENKINS_SLAVE_SSH_PUBKEY」に「jenkins_home/.ssh/id_rsa.pub」のキーを設定します。

また、Jenkins(Master)で、links を設定して master から slave01 を名前解決できるようにします。

docker-compose の起動

コンテナをバックグランドで起動します。


$ docker-compose up -d

docker-compose の起動

設定したポートで、http://localhost:8080/ にアクセスすると、Jenkins の画面が表示されます。

パスワードは、Jenkins(Master)の起動で表示されたものを利用します。

手っ取り早く、Install suggested plugins を選択してインストールします。

Jenkins のユーザを作成してログインします。

Jenkins のノード(slave01)の設定

本の通りにノードの管理で、slave01 の認証情報(id_rsa、パスフレーズ)などを設定していきますが、slave01 の起動がエラーになってしまいました。
(Jenkins の Jenkinsの管理 > ノードの管理 で slave01 の設定の箇所)


...
java.io.IOException: Java not found on hudson.slaves.SlaveComputer
...

調べたところ、slave01 で java のパスを通す必要があるようです。

Slave に Java のパスを通す

ホスト(Mac)側から、slave01 へログイン


$ docker exec -it slave01 bash

slave01 の Java のパスを調べる


# which java
/usr/local/openjdk-8/bin/java

このパスを、slave01 の「高度な設定 > Javaのパス」に設定します。

これで、ノード再起動すると同期が完了します。

 

ちなみに、Docker For Mac で利用してみましたが、結構CPU負荷が高いです。


$ docker-compose stats

  2020/03/28

Qiita とか調べていると、いきなり docker と docker-compose が混在してなんだこりゃ?となったりします。
(少なくとも自分は)

特に、他人の作ったdocker-compose.yml を docker の基礎がわからないと何をしているのか読み取れません。

例えば、Laravel を Docker で動かす Laradock はすごく便利で少しの知識があれば開発環境を動作せることが可能ですが、「やっぱり自分で構築したい!」となると、その設定を全部把握するのはかなりの時間がかかりそうです。

docker-compose が必要になる段階

  • docker の基本コマンドを覚える
  • Dockerファイルを記述
  • 複数のコンテナの設定が必要になる
  • Dockerファイルの管理が必要となる
  • docker-compose があると一度に管理できる

最初は docker の基本コマンドを繰り返し実感するのが良いのでは?と思います。

docker-compose を使ってみる

まず、docker-compose コマンドが存在するか確認します。


$ docker-compose version
docker-compose version 1.25.4, build 8d51620a
docker-py version: 4.1.0
CPython version: 3.7.5
OpenSSL version: OpenSSL 1.1.1d  10 Sep 2019

あらかじめ、Dockerfile でイメージを作成済みであることを前提とします。

hello:latest イメージの シェルスクリプト「hello.sh」


#!/bin/sh
echo "Hello Shell Script"

hello:latest イメージの Dokcerfile


FROM ubuntu:18.04

COPY hello.sh /usr/local/bin
RUN chmod +x /usr/local/bin/hello.sh

CMD ["hello.sh"]

docker-compose を利用する前にまず docker コマンドでの起動を確認します。
 

docker コマンドによるビルド&起動コマンド


$ docker image build -t 

起動確認ができたら、一度 dockerコンテナを落としておきます。


$ docker stop コンテナID

docker-compose.yml を設定して実行する

docker-compose を利用するには、「docker-compose.yml」の設定が必要となります。

docker-compose.yml


version: "3"
services:
   hello:
     image: example/hello:latest
     ports:
       - 9000:8080

docker-compose で起動(フォアグランド)

docker-compose up で、docker-compose.yml を読み込み、「hello.sh」が実行されます。

version

docker-compose.yml のフォーマットバージョンで、「3」は2020/3時点での最新です。

services

services: の第一階層に、各コンテナの名前を複数定義します。

例では、hello がコンテナ名となります。

image

Dockerイメージ名を設定します。

ports

ホストと docker のポートフォワーディング設定(ホストポート:dockerポート)


$ docker-compose up
Creating network "docker-hello_default" with the default driver
Creating docker-hello_hello_1 ... done
Attaching to docker-hello_hello_1
hello_1  | Hello Shell Script
docker-hello_hello_1 exited with code 0

ちなみに、このサンプルは hello.sh を実行したのちに exit しているため、状態は「Exit 0」となっています。

プロセスを確認する

docker のプロセス確認は docker-compose コマンドでも可能です。


$ docker-compose ps
       Name           Command    State    Ports
-----------------------------------------------
docker-hello_echo_1   hello.sh   Exit 0   

コンテナを停止

docker-compose.yml で設定しているコンテナを全て停止します。


$ docker-compose down
<< Top < Prev Next > Last >>
AWS CLI と jq でインスタンス一覧を整形して表示
React と Laravel7 のプロジェクトを作成する
Homebrewインストール-2020年版
3直線で囲まれた範囲塗りつぶし
PuLP で線形最適化問題を解く
カスタムのペジネーションを作る
node-sass を使って sass をコンパイルする
Log ファサードでSQLログを分離して書き出す
いちから始める Docker - 複数のコンテナを使う - (2020年)
いちから始める Docker - docker-compose を使う - (2020年)
AWS ECR を使ってみる
Laravel7 でマルチ認証
Mac に AWS Client を設定する
Laravel 7 リリース
v-html でHTML表示する
Laravel で Vue コンポーネントを使う
Laravel で Nuxt.js を使ってみる(Docker環境)
いちから始める Docker -コンテナをビルド- (2020年)
いちから始める Docker -起動してみる- (2020年)
Mac で MySQL(8系)
composer で vendor がインストールできない
Eloquent の日付を Carbon で扱う
webpack 4 入門(npm編)
[Mac]容量を減らす
DIコンテナはじめ
freee SDKを Laravel で使ってみる
freee API を使ってみる
Segueを利用しない画面遷移
Xcode11.3 で XVim2 を利用する
Codable で JSONを読み込み
Webpack入門(yarn編)
MacからLaradock PostgreSQLで接続エラー
Dockerで不要なコンテナ・イメージを削除
Mac で Laradock の構築
yarn インストール&プロジェクト作成
Laravel 6.x 構築(Homestead編)
Composer インストール
nvm インストール
npm install が Mac でエラー
HTMLタグでカーソルが同時処理(ミラーリング)されてしまう
DI(依存性注入)
[Ubuntu]Let's Encryptで無料の証明書を利用する
[Apache]Apache2.4のアクセス制限が変更
[Ubuntu]rootのログインとsudo権限追加
タミヤ マイコンロボット工作セットをMacに接続してみた
pgAdimn4 でブラウザで開けなくなる
Java8 を HomebrewとjEnvで構築
Android Studio環境構築 2019
ロケールの再構築
vagrant グループに Apacheを追加