1日1%成長するブログ

毎日成長するために仕事/プライベートで得た学びをアウトプットするブログです

laravelでHello worldする

composerのインストール

php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
php composer-setup.php
php -r "unlink('composer-setup.php');"

laravelのインストール

php composer.phar create-project --prefer-dist laravel/laravel myblog
php artisan --version

設定変更

.env

DB_CONNECTION=sqlite

config/app.php

timezone => 'Asia/Tokyo`
locale => 'ja'

モデルの作成

database/migrationsの最初からあるファイルは消しておく

php artisan make:model Post --migration
Schema::create('posts', function (Blueprint $table) {
  $table->increments('id');
  $table->string('title')
  $table->text('boby')
  $table->timestamps();
});
  • カラムを指定する
php artisan migrate

データベース確認

sqlite3 database/database.sqlite
 .schema posts
.quit

インタラクティブにモデルを操作する

php artisan tinker
$post = App\Post();
$post->title = 'title';
$post->save();
App\Post::all();
App\Post::all()->toArray();

コントローラー作成

php artisan make:controller PostsController
public function index() {
  return "hello world";
}

routes/web.phpを編集

Route::get('/', 'PostsController@index');

サーバーを起動

php artisan serve --host localhost --port 8020

こんな感じで表示されればOK

f:id:masaru_furuya:20180122180951p:plain

laravelで管理画面を作る

インストール

composer require encore/laravel-admin
php artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"
php artisan admin:install

最後のコマンドで必要なコントローラー、設定ファイル、データベースを用意してくれる

URLの名前を変えたい

稼働しているサービスと同じプロジェクトで動かしたい場合、デフォルトのadminのままだとセキュリティ上よろしくないので推測されにくい名前に変更しておきましょう。

新たに追加された cofig/admin.php のprefixを変更すればそれだけで変わります。

'route' => [
   'prefix' => 'hogehoge',

http://localhost:3000/hogehogeにアクセスして こんな画面が出ればOKです。

f:id:masaru_furuya:20180122120455p:plain

カスタマーサポートツールの調査メモ

サポートツール

www.supporttimes.com

  • Zendeskは問い合わせをステータスごとに管理できる。毎日大量のメールが送られてくるサービスならオススメ
  • メールワイズはZendeskと似てるかも。メールの共有サービス
  • Intercomは顧客と直接チャットでサポート。スタートアップ向きかも

メール配信システム

外部サービスを使う

  • SendgridやMailchimpが有力
  • 海外製のツールは携帯キャリア向けに配信するとなるとキャリア側に迷惑メール扱いされてしまう可能性がある
  • ユーザー情報のつなぎこみが必要。CSVをインポートする作業
  • 送信失敗(バウンス)が大量発生すると、アカウント停止されるのでリストの定期的な確認が必要 sendgrid.kke.co.jp

その他

  • 管理画面作って社内のメールサーバーを使う
  • 日本製のメール配信エンジンを使う

react-native-elementでリストを作る

react-native-elementを使ってリストを使おうとすると、 unrecognized font family 'Material Icons`的なエラーがでる時があります。

実はreact-native-vector-iconsはXcodeAndroid Studioでfont-familyを設定してあげる必要があります。

twins-tech.hatenablog.com

ただ自分でネイティブ設定するの、めっちゃハマりそうですよね? なのでrnpmというパッケージを使うと、ライブラリで必要なネイティブの設定を自動でやってくれます。

rnpm link react-native-vector-icons

これで再度react-native run-iosすると反映されます。

こんな感じになればOKです。

f:id:masaru_furuya:20180121160813p:plain

railsで多: 多の関連を作る

  • モデルを作る

    • bundle exec rails g model user
    • bundle exec rails g model group
    • bundle exec rails g model group_user
  • テーブルを作る

  • モデル間の関連を作る

class User < ApplicationRecord
  has_many :group_users
  has_many :groups, through: :group_users
end
class GroupUser < ApplicationRecord
  belongs_to :user
  belongs_to :group
end
class Group < ApplicationRecord
  has_many :group_users
  has_many :users, through: :group_users
end

current_user.groups

deviseを使っている状態で上記のようにすると、今のユーザーのグループをまとめて取ってくるのようにできる

Railsのフォームで配列とハッシュを併用する

ハッシュだけ、配列だけの書き方は色んな所で書かれているが、 併用した書き方がなかなか見つからず困った。

古いが以下の記事が一通りまとまっていてわかりやすかった。

Rails のフォームで配列形式のデータを扱う方法 - WebOS Goodies

ハッシュのみ

HTML

<input type="text name="user[name]" />

params

user => {
  name: 'Taro'
}

ストロングパラメータ

params.require(:user).permit(:name)

配列のみ

HTML

<input type="text name="name[]" />

params

name => ['Taro', 'Ichiro']

ストロングパラメータ

params.permit(name: [])
  • 配列を許可する時は空配列を指定する

www.techscore.com

ハッシュの配列

HTML

<input type="text name="users[][name]" />

params

users => [
   { name: 'Taro' },
   { name: 'Ichiro' },
]

ストロングパラメータ

params.permit(users: [:name])

http://j-caw.co.jp/blog/?p=1590

Strongパラメータの意味

ruby-rails.hatenadiary.com

リクエストの内容をそのまま使ってDBを更新すると管理者の状態でユーザー登録できたりと脆弱性をうむので、 Rails4から更新するパラメータのみ許可することになった。ストロングパラメータを使っていないとエラーになる。

requireを使う意味がわかったようなわからないような... 複数のエンティティを同時に送る時には便利そうだが。

react-native-elementをインストールする

yarn add react-native-vector-icons
yarn add react-native-elements

react-native-vector-iconsが必ず必要

import { FormLabel, FormInput } from 'react-native-elements'

<FormInput
   onChangeText={(text) => changeInputText(text) }
 />

入力フォームはこんな感じで使う