IT系バンドマンの日常

備忘録やライフログなど

LaradockでのLaravelローカル開発環境構築

自分用の備忘録です

Environment

Tools Version
Laravel 5.5
Laradock 5.9.0
MySQL 8.0

Project name : myapp

Laradock directory name : laradock-myapp

laradockの場合ディレクトリ名がそのままdockerのimageのprefixになるので、ディレクトリ名はlaradock-{プロジェクト名}としました。 また、プロジェクトの配布のしやすさを考慮して、プロジェクトのルートディレクトリにgit submoduleとしてlaradock-myappを配置しました

1. 設定ファイルの編集

myapp/.env

DB_HOST=mysql
DB_PORT=3306
DB_DATABASE=myapp
DB_USERNAME=laradock
DB_PASSWORD=laradock

myapp/laradock-myapp/.env

DATA_SAVE_PATH=.laradock/data

MYSQL_VERSION=8.0
MYSQL_DATABASE=myapp
MYSQL_USER=laradock
MYSQL_PASSWORD=laradock
MYSQL_PORT=3306

laradock-myapp/.envのなかで定義したMYSQL_DATABASEの名前がそのままmysqlコンテナの中のDB名になります。

3. 起動!

コンテナを起動します

docker-compose up -d nginx mysql

ここまでくればブラウザでlocalhostにアクセスするとlaravelのサイトにアクセスできるようになってると思います。

4. マイグレーションファイルの実行

docker exec -it laradock-myapp_workspace_1  /bin/bash

php artisan migrate

5. 使った後はコンテナを停止させておきましょう

プロジェクトごとにLaradockを持ってる場合は1つずつしかコンテナを起動できません。(ポートの設定を変えればできるかも) なれるまでは利用し終わったコンテナは下記コマンドで停止させておきましょう。

docker-compose kill

Laravelの外部キー制約ではまった

Laravelでmigrationファイルをかくとき外部キー制約の設定ではまったのでメモ

まちがい

$table->integer('user_id')->nullable(false);
$table->foreign('user_id')->references('id')->on('users');

せいかい

$table->integer('user_id')->unsigned();
$table->foreign('user_id')->references('id')->on('users');

外部キー制約を貼るカラムにnullable(false)を設定するとエラーでました。 公式リファレンスをもとにunsigned()を設定して再度実行するとできました!

以上です!笑

Laravelで利用するコマンド集(自分用)

準備

新規プロジェクトをつくる

laravel new project_name

アプリケーションキーを設定

php artisan key:generate

migrate

テーブルを全部削除して、マイグレーションを最初からやりなおす

php artisan migrate:fresh

シーダを指定して実行

php artisan db:seed --class=PhotoTableSeeder

Test

テストファイルを指定して実行

phpunit app/tests/ExampleTest.php

Startup Weekend Okinawa Vol.7参加してきた!

みなさまこんにちは。

11月3,4,5日の3連休でスタートアップの一連の流れを体験できるイベント「Startup Weekend Okinawa Vol.7」に参加してきたので報告です!ブログ書くまでが勉強会。

大学生のころから気になっていて参加したかったのですが、なかなかタイミングが合わず4年越しの参加になりました。

1日目

いきなり懇親会!ピザ食べながらみんなでおしゃべりしました。

Tシャツの協賛していただいたDocomoさんのAPI便利そうな上に無料らしいです(すご!)

dev.smt.docomo.ne.jp

各自、持ち合ったアイデアを1分間ピッチ。今回はデベロッパーとして参加するつもりできたのでなんもアイデア持ってこなかったんですが、即興で「貧困の子供たちにエレキギターの楽しさを伝えたい!」的なアイデアでとりあえず人生初1分間ピッチやってみました! やってみて思ったのは、自分のアイデアが世に受け入れられるかどうかなんて、色んな人にきいてみないとわからないんだからイベントとかじゃなくても思いついたらどんどんアイデア人に話したらいいと思いました。

チームビルディングでは、投票で生き残ったアイデアに会場のみんなが乗っかっていくんですが、自分の服の写真をアップロードしてユーザ間同士でコーディネートをし合うサービスを作るというグループに参加。理由はもちろん自分がダサい自覚があったからで、こういうサービスあったらすごく助かるなーと思ったから。

心強いエンジニアの先輩が2人もチームメイトになってくれたので明日から楽しみ。明日も頑張るぞー!

2日目

こういうイベントに参加するといつもそうなのですが、自分のスキルの非力さを痛感させられます。。作業のお手伝いをしながら1日先輩方のスキルを盗んでいました。

次回の教訓としては、環境構築はマジで前日までに終わらせておくこと。下手したら1日環境構築で持っていかれるので。。。

3日目

昨日で先輩エンジニア方が発表に必要な部分の実装を終わらせてくださっていたので今日は1日発表の準備にまわりました。

サービスのアピール用にショートクリップを撮影することになり、人生初動画出演させていただきました。内容は、このアプリを使えばデートにかっこいい・かわいい服を着ていくことができますよ!的なもの。

チームの美女と撮影してみて、緊張しすぎて死んだし、なんでもっとおしゃれ勉強してこなかったんだろうってすげー思った。でもすごい楽しかった!

発表会では、いろんなアイデアのチームの発表がきけてとても楽しかった!

まとめ

久々に濃い3日間を過ごさせていただきました。

チームに美女が4人もいたせいか、このイベントが終わってからすごくファッションのことについて考えるようになりました。「俺、ファッション全然気使ってないぜーw」的なアピールしてるくせに、「もうちょっとああいう恰好しとけばよかったかなー」とか、「こういう恰好するにはこの服が足りないよなー」とか終わってから考えるんですよね!(始まる前に考えればいいのに!)

自分を高める作業ってなんでもそうだけど、発表できる場があるかどうかって凄く重要だと思ってて、そういう意味では「WEAR」はユーザにファッションを披露できる場を与えてるから、核心ついてるサービスだよなと思いました。だとしたら俺たちが本当に取り組まなくちゃいけないのは、ダサい男子諸君(俺含む)が美女にファッションを披露できる場を提供することなんじゃないかと。今はまだ思いつきませんが、この思考回路からなんかいいアイデア出てきそうな感じがする!

チームメンバーの方も言ってましたが、この世をウラでまわしてるのはまじで女性の方々だと思う。

よかったこと

  • 投資家やオーガナイザーの支援者さんたちの「やるならやれ。くるならこい」なスタンスが凄く好き
  • イベントに参加している人のメンタルが全員プラスに向いてるのでいい仲間が自然とできあがる
  • たった3日間イベントに参加するだけで今の自分に足りていないスキルがすごく明瞭になる

今後の課題

  • Laravelつかいこなす
  • 開発環境の勉強・構築
  • ファッション勉強してかっこよくなって人に披露する場を多く設ける

このイベントを運営してくださったオーガナイザーのみなさま。様々な支援をしてくれたみなさま。そして、3日間一緒に走り抜けてくれたチームのみんな。本当にいい経験になりました。ありがとうございました!

土日を利用してひとりハッカソンやってみた

ひとりハッカソンをやろうとおもった経緯

  • 社会人2年目である程度スキルがついてきたところでどれくらいやれるのか腕試し
  • 個人のプロダクトを一つも持っていないので1つくらい作ってみたかったから
  • それと、そういえば有名所のWebフレームワーク使ってサービス作ったことなかったなと思ったので、今回はPythonDjangoでやってみようと思います。

つくるもの

沖縄のライブ情報がたくさん集まってるサイトを作りたいと思います。作ろうと思った経緯としては、好きなバンドのライブ情報って結構みおとしがちで、月1とかで各ライブハウスのページまわったりしないといけないので結構めんどくさいんですよね。これから作るサイトさえ見ればライブ情報全部わかるようにしたかったからです。

競合分析

作ろうとしてるものに一番近かったのは

gigle (ギグる) | 沖縄のライブ・コンサート情報

ですが、会員登録が必要だったり、アーティスト名とかでソート出来ないので使いづらいです。今回は会員登録なしで検索機能を充実させたサイトを作ろうと思います。

作業ログ

1日目

  • AM9:00起床
  • 朝飯。冷凍チャーハンを食らう
  • PM10:00サイト構成を考えつつ家事をこなす
  • 一旦休憩をするつもりが14:00まで寝てしまう
  • その後Djangoチュートリアルを夜まで

Python Django チュートリアルまとめ - Qiita

2日目

Python3 + urllib + BeautifulSoupでネット上の情報を取得する - Qiita

成果物

できました!!アクセスするとランダムで変な顔文字が出るサイトが←

f:id:kaoru6strings:20170924205610p:plainf:id:kaoru6strings:20170924205613p:plain

どやぁ( ・´ー・`)

まとめ

流石に2日では触ったことのないフレームワークWebサービス完成まで持ってくのは無理があるってことが分かりました。 時間さえあれば完成まで持っていけそうだということはわかったので、完成次第、またこのブログでお知らせしたいと思います。 あと、土日ハッカソンやるって決めたら金曜の夜は21:00ごろ寝て次の日に備えるのがいいかもしれません。眠くてお昼寝してしまうので←

今度はこじんまりと3人ハッカソンとかやってみたい!

Python3とDjangoのコマンド集(自分用)

Djangoのバージョン確認

python -m django --version

PostgreSQLのコマンド集(自分用)

foobarという名前のview定義が知りたい

SELECT definition FROM pg_views WHERE viewname = 'foobar';

全ビューを調べたい

SELECT viewname, definition FROM pg_views ;

ログイン

psql -U USERNAME -d DATABASE

version関数でPostgresqlのバージョン確認

SELECT version();

テーブルの一覧表示

\d

ログアウト

\q

databaseを指定して論理バックアップ

pg_dump -U USERNAME DBNAME > dumpfile.sql

スキーマ確認

\dn

データベース一覧

\l

.sqlファイルを流し込む

\i dump.sql

UPDATE

UPDATE TABLE_NAME
SET id = 0, name = 'hogehoge'
WHERE id = 1;

※標準SQLの仕様上、文字列を扱う場合はシングルクオーテーションを使用する

INSERT

INSERT INTO TABLE_NAME VALUES
  (1, 'wow'),
  (2, 'FOO!'),
  (3, 'Awesome!');

データベースクラスタのセットアップ

initdb -D /usr/local/pgsql/data

参考サイト

https://www.postgresql.jp/document/9.4/html/creating-cluster.html