Laravel 03日目:早速やらかす

起きたこと

Welcomeページ( http://localhost/ )は描画されているけれど 新規ページ( http://localhost/user )が描画されない。というか404エラーになる。

結果

nginxの設定が間違えてた。いつものCakeとは違う。 下記の記述が足りてなかった。

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

親切に書いてあるんやから、ちゃんとしたがおうな。という話。 Deployment - Laravel - The PHP Framework For Web Artisans ということで、過去記事も修正しておきます。

所感

ちょっと時間が取れず、controllerやrouterも少し触ったけれどまとめるのは後日にします。 流石に雑記事すぎるけれど、このブログ日記なので・・・!(逃

Laravel 02日目:データベース接続とSeedを使ったデータ投入やってくよ!

今日やること

データベース接続設定の修正

config/.env の設定値を環境に合わせて修正していく

DB_CONNECTION=mysql
DB_HOST=[IP]
DB_PORT=[ポート番号]
DB_DATABASE=[データベース名]
DB_USERNAME=[ユーザ名]
DB_PASSWORD=[パスワード]

マイグレーションを使ってテーブル作成

マイグレーションファイル作成

database/migrationsの下にファイルが作成されている。

$ php artisan make:migration create_users_table
Created Migration: 2019_12_02_232635_create_users_table

マイグレーションファイル修正

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class CreateUsersTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->bigIncrements('id');
            $table->string('name');
            $table->string('email')->unique();
            $table->string('password');
            $table->timestamps();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('users');
    }
}

マイグレーション実行

$ php artisan migrate
Migration table created successfully.
Migrating: 2019_12_02_232635_create_users_table
Migrated:  2019_12_02_232635_create_users_table (0.06 seconds)

ロールバックはこうする

$ php artisan migrate:rollback
Rolling back: 2019_12_02_232635_create_users_table
Rolled back:  2019_12_02_232635_create_users_table (0.04 seconds)

テーブルの確認

mysql> desc users;
+------------+---------------------+------+-----+---------+----------------+
| Field      | Type                | Null | Key | Default | Extra          |
+------------+---------------------+------+-----+---------+----------------+
| id         | bigint(20) unsigned | NO   | PRI | NULL    | auto_increment |
| name       | varchar(255)        | NO   |     | NULL    |                |
| email      | varchar(255)        | NO   | UNI | NULL    |                |
| password   | varchar(255)        | NO   |     | NULL    |                |
| created_at | timestamp           | YES  |     | NULL    |                |
| updated_at | timestamp           | YES  |     | NULL    |                |
+------------+---------------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)

Seed

Seedファイル作成

$ php artisan make:seeder UsersTableSeeder
Seeder created successfully.

Seedデータ作成

database/seeds/UsersTableSeeder.php

<?php

use Illuminate\Database\Seeder;

class UsersTableSeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
    public function run()
    {
        DB::table('users')->insert([
            'name' => Str::random(10),
            'email' => Str::random(10).'@m.cybermergina.top',
            'password' => bcrypt('password'),
        ]);
    }
}

database/seeds/DatabaseSeeder .php

<?php

use Illuminate\Database\Seeder;

class DatabaseSeeder extends Seeder
{
    /**
     * Seed the application's database.
     *
     * @return void
     */
    public function run()
    {
         // ここを追加してSeed実行時に追加したSeedクラスが呼ばれるようにする
        $this->call(UsersTableSeeder::class);
    }
}

Seed実行

$ php artisan db:seed
Seeding: UsersTableSeeder
Seeded:  UsersTableSeeder (0.09 seconds)
Database seeding completed successfully.

データ確認

mysql> select * from users;
+----+------------+-------------------------------+--------------------------------------------------------------+------------+------------+
| id | name       | email                         | password                                                     | created_at | updated_at |
+----+------------+-------------------------------+--------------------------------------------------------------+------------+------------+
|  1 | 1t0gtLmC5G | bO2FYpxwHi@m.cybermergina.top | xxxx | NULL       | NULL       |
+----+------------+-------------------------------+--------------------------------------------------------------+------------+------------+
1 row in set (0.00 sec)

所感

今のところ特に何にも躓くこともなく順調にいっている。良き良き。 ただ、細かいところは読めてないので大枠作り終えたらドキュメントの隅まで見たいなという気持ち。

Laravel 01日目:初期構築やってくよ!

新規プロジェクト作っておくだけ! 公式ドキュメント見るのと変わらんでっせ! https://laravel.com/docs/6.x

環境

EC2インスタンス(おかねないのでゆるして) nginx,php-fpm,mysql,composerは導入済み

構築

インストーラー入れる

※ laravelコマンド使えるようにPATH追加も忘れずに

$ composer global require laravel/installer

$ tail ~/.bash_profile
export PATH=$PATH:$HOME/.config/composer/vendor/bin

新規プロジェクト追加

$ ls -la /usr/share/nginx/laravel
total 3
drwxr-xr-x  3 ec2-user ec2-user   18 Dec  1 14:04 .
drwxr-xr-x  8 root     root      111 Dec  1 14:04 ..

$ laravel new blog

nginxの設定

$ cat /etc/nginx/conf.d/laravel.conf
server {
        listen  1111;
        server_name     127.0.0.1;
        root    /usr/share/nginx/laravel/blog/public;
        index index.php;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                fastcgi_split_path_info ^(.+\.php)(/.+)$;
                if (!-f $document_root$fastcgi_script_name) {
                        return 404;
                }
                fastcgi_pass   unix:/var/run/php-fpm/www.sock;
                fastcgi_index index.php;
                include fastcgi_params;
                fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
                fastcgi_param PATH_INFO $fastcgi_path_info;
                fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
        }

}

$ sudo nginx -t
$ sudo nginx -s reload

これでページみれるはず

f:id:cybermergina:20191201235740p:plain

所感

今日ぺちこんで懇親会まで行ったのでゆるしてほしい。。。

ここまで読んだ。明日はデータベース接続かな https://laravel.com/docs/6.x#configuration

アドベントカレンダーに乗っかっていこうかなって

ブログを一年放置、Qiitaも一年以上書いてない(たぶん) 転職してからアウトプット一切してない

ので、 アドベントカレンダーに乗っかって 毎日ブログを書いておこうと思います。

何やるか迷ったんですが、個人的に 「CakePHP大好きだけど、みんなLaravelにシフトチェンジしてるよね。。大昔に触ったきりだし触ってみよう(`・ω・´)」 と思ったので

毎日少しでもLaravelしていこうと思います! 頑張る!!!!ぞい!!!!!!

英語読む勉強にもなるかなーと思うので 基本的には英語の公式ドキュメント見ながら進めていく。

git-completion.bashが無い・・・!

背景

新しいEC2インスタンスyumでgitを入れようとしました。 git v2.13.6が入ります。気にせずにgit向けの設定を用意していたら 下記のファイルが見つかりません

$ sudo find / -name git-completion.bash -type f

このファイルはsourceコマンドで呼び込むとgitコマンドの補完をしてくれる公式が配布しているファイルになります。

よく調べてみたところ、下記ディレクトリの下に「git-completion.tcsh」というファイルがありました。

$ sudo find / -name git-completion.*-type f
/usr/share/git-core/contrib/completion/git-completion.tcsh

tcshファイルの設置を試してみる

$ yum install tcsh
$ cp /usr/share/git-core/contrib/completion/git-completion.tcsh ~/.git-completion.tcsh
$ chmod u+x ~/.git-completion.tcsh
$ source ~/.git-completion.tcsh
-bash: /home/ec2-user/.git-completion.tcsh: line 127: syntax error: unexpected end of file

シェルに詳しくないもので気づくのが遅かったのですが 単純にbashで実行されているだけですね

sourceはデフォルトで設定しているシェルで実行されるので 私の環境の場合はbashで実行されました。

なので、bashではなくtcshcshをデフォルトのシェルとして使ってる環境では問題ないかと思います

が、私はbashやshで精一杯なので、tcshを使うのは辛いです!今は!

ということでGithubにアップされているgitブランチを確認すると

https://github.com/git/git/tree/v2.13.6/contrib/completion git-completion.bashが・・・!

$ cd ~
$ wget https://github.com/git/git/tree/v2.13.6/contrib/completion/git-completion.bash
$ tail -n 1 ~/.bash_profile
source ~/.bash_profile
$ source ~/.bash_profile

これでいけますた:)

Rubyのクラス変数・インスタンス変数・クラスインスタンス変数

qiita.com

なるほど。。 細かいところはリンク先がとても参考になります(ありがたや・・・)

クラス変数

  • クラス共有の変数
  • クラスオブジェクト内の関数上で定義
  • @@hoge

インスタンス変数

  • 対象のクラスの全てのインスタンス内で使える変数
  • クラスオブジェクトで定義
  • @hoge

クラスインスタンス変数

  • クラス変数に近い機能
  • クラスオブジェクト内の関数上で定義
  • @hoge

GoでWebアプリを作りたい

資料を拝見

コチラの資料を見つけた

知らない名前のフレームワークやツールが多いので 気になったものをそれぞれちゃんと見てみる Webエンジニアとしてはこの辺の情報が固まってるの、とても有難い:pray:

GoによるWebアプリ開発のキホン

ここより先は内容的に保証できないので、あまり参考にしないでください!
調べつつ追記していけたらと思います。

フレームワーク

Goji / Gorilla

シンプル(ルーティングのみ)

revel / mux

フルスタック(セッション管理などできる)

マイグレーション

goose

DBのマイグレーション SQLかgoで書く

ORマッパー

GORM

高性能。ActiveRecordっぽい

genmai

クエリビルダに近い

テンプレートエンジン

Ace

SlimやJadeにちかい

パッケージマネージャ

Godep

スター数が多い

gom

Bundler + Gemfileに近い

オートビルドツール(?)

Flesh

ファイルが保存されたタイミングでリビルドしてくれる 導入コストも低い

$ go get github.com/pilu/fresh
$ fresh

どう組み合わせる?

まだ詳しくは分かってないけども、このような感じになるのかな・・・?

ミニマム

中規模サービス

  • フレームワーク: revel(mux)
  • ORマッパー:GORM
  • マイグレーション:goose
  • テンプレートエンジン:Ace
  • パッケージマネージャ:Godep(gom) ※ revelの機能でオートビルドはされるっぽい