LINE BOOT AWARDS 2018に応募するよ。

LINE BOOT AWARDS 2018に応募するよ。

スマートスピーカーがどんどん売れて、アキてきた人も多くメルカリでだいぶ値崩れしてきました。
これは新しい体験をするチャンスと、LineClova、AmazonEcho、GoogleHome(mini)を注文しました。

発売当初は忙しいこともあって、乗っかってなかったのですが、1週遅れくらいでいろいろ試して見たいと考えています。

そこでLINE BOOT AWARDS 2018を発見。

いろいろ情報あつめてると、LINE BOOT AWARDS 2018があるとのこと。へぇ~くらいだったのですが、ちょうど地元でLineClovaスキルのハンズオンがあり、なかなか簡単にスキルできちゃうなぁーと。Lineの方々がめっちゃ応募してーと押してたことや、ちょうどなにか始めようと考えていたこともあり応募してみたいと思います。

なにを作るの?

いちおうハンズオンでは、【沖縄の行事】という行事名を言うと、旧暦の日付を教えてくれるものと、【僕いくつ】という2つのスキルを作りました。
本番はどうするかまだ検討中。できれば可能性が広がるワクワク感を加えたコンテンツにしたいなぁーと考えています。乞うご期待。

START UP CAFE KOZA 2nd Anniversary FES 2018.10.6

殆どいつも引きこもっているのでいろいろお話を拝聴して勉強になりました。かなり断片的ですがメモ。

コザをスタートアップのハブに

シリコンバレーなどテックのみでは、イノベーションが怒らなくなってきている?、社会的な仕組みなどを変えていく事が必要になってきているetc

沖縄県内でのうごきとか。

リゾテック(リゾート+テック)っていうキャッチーなことを沖縄から発信して行きたい、沖縄をゾーニング(医療、MiCE、シーサイドなどに分けてなど)、たとえば、基地(キャンプキンザー)返還跡地利用で、モビリティーの試験(特区?)など

中国ベンチャー/スタートアップ界隈

  • 中国投資バブル、投資ファンド > スタートアップ
  • 国内スタートアップは金額膨らみすぎて、海外(アメリカ)などのスタートアップを探して投資するほうが良い
  • 日本のスタートアップは情報がない(英語で情報がない、興味がない? Microsoft venturesもjapanは無い)
  • 北京に投資ファンドが多いのでそこにスタートアップも集まっている(日本だと東京)

台湾ベンチャー支援界隈

  • 文化的には大陸よりは日本との親和性が高い
    • SMSは、FB,Instagram,Line、TVでは日本ドラマが流れていたりと大陸(中国)よりは日本に近い
  • LinePay,WeChatPay,AliPayなど乱立

ベトナム

  • 中国資本が大きく入ってきている感じは受けない
  • 家電などは韓国製品が安く受け入れられている雰囲気
  • 電子決済はまだまだで現金など(サムスンペイなどが入ってきている)
  • 日本企業は話が遅いことを皮肉って笑い話になったり。

海外からみた日本

  • 話が遅い、視察できて何も決まらない。(決済権がなくなにも進まない
  • その場で本社TEL OK じゃ始めようてきなスピード感。
  • 話進めていって最後(上の方がアホ)でおじゃんになるとか。
  • 市場として魅力が少ない

インターステラテクノロジーズ

  • 小規模なロケットは、市場があり成長産業
  • 見学できる(しかも4,000円安っ)、こないだの失敗ロケットもあるよ。

沖縄スタートアップの意義など

個人的に地方でのスタートアップは不利な面が多く、東京でやったほうがいいとの印象はある。

  • 行政が本気でリスク取って、実証実験場(特区)など
  • たとえば、マイナンバーカード保有率が50%超えた場合に健康保険/運転免許/決済などマイナンバーカード(or SIM)での利便性を全面にだした実験など
  • スタートアップのハブ化(アジア/日本)から情報/人の集まる場所(ファンドなど金が集まらないと人も集まらない?)
  • ストレスフリーな環境(出勤などのストレス減)
  • 投資ファンドなどの金が集まらないとなかなか人も集まらないのでは
  • そもそも人材、優秀スタートアップが無い、投資ファンドないにわとり卵的な(やっぱ実証実験場的な方がよいのかな)

話聞きながらの思いつきアイディア

  • 文化のハブ(オタク,食 etc) 例えば、台湾と東京のサブカルチャーのハブ
  • 日本情報を発信する台湾メディア、または音声メディア
  • 台湾/中国観光客が日本のポップカルチャー/サブカルチャーを体験できる場所(VR etcなど)

CPIの共用サーバーでのLaravel5.5設定(サブディレクトリに設置)のメモ

CPIの共用サーバーでのLaravel5.5設定(サブディレクトリに設置)のメモ

SSHログイン

基本使える、公開鍵認証OK、基本的なコマンド利用可能

一覧 http://acesr.document.secure.ne.jp/tools/sshkeys/

  • ※rsyncでデプロイしたかったが利用不可。> FTPの同期などで代用
  • composer使いたかったけど利用不可。 > FTPでアップ

ドキュメントルートの問題

シンボリックリンクでOKドキュメントルートは基本以下

/usr/home/ユーザー名/html

URLはサブディレクトリにする必要があった。(本当はサブドメインが良かったが、SSLが高い事が原因で致し方なく)以下がルートのようにしたい。

https://hogehoge.com/myapp/

アプリはいかに設置

/usr/home/ユーザー名/myapp/

以下のディレクトリからpublicにシンボリックリンクをはる

/usr/home/ユーザー名/html/myapp  -> ../myapp/public/

DELETEメソッドが通らない

axios.delete(ほげほげ〜とすると通らない。フォーム同様に POSTで投げて、_methodパラメータで渡す。

axios.post('/myapp/pathtourl/999,{ _method:'DELETE' }).then(res => {
    //何か処理
})

PHPのバージョン

publicフォルダにphp.iniファイルを置いて php7.1を利用
(詳しくはHelpを)

AddHandler x-httpd-php71 .php

Lalavelで、Faker Seederを使ってダミーデータを作成

Lalavelで、Faker Seederを使ってダミーデータを作成

まずはartisanのコマンドでクラスを作成

$ php artisan make:sheeder MySeeder

database/seeder/MySeeder.phpが作成されますので、
run()メソッドにダミーデータを作成するスクリプトを記載します。

<?php

use IlluminateDatabaseSeeder;
use FakerFactory as Faker;
use CarbonCarbon;

class MySeeder extends Seeder
{
    /**
     * Run the database seeds.
     *
     * @return void
     */
   public function run()
    {
        $faker = Faker::create('ja_JP');
        for ($i = 0; $i < 100; $i++) {
            $params = [
                'email' => $faker->email,
                'name' => $faker->name,
                'created_at' => Carbon::today(),
                'updated_at' => Carbon::today()
            ];
        }
    }
}

実行は以下

//すべてのスクリプトを実行
$ php artisan db:seed --class=UserTableSeeder
//指定したスクリプトを実行
$ php artisan db:seed --class=MySeeder

Laravel 年度ごとのサブディレクトリでルートのPrefixを設定

Laravel 年度ごとのサブディレクトリでルートのPrefixを設定

年度ごとにサブディレクトリがあるサイト(就職/進学サイト)などで、各年度ごとにRouteのprefixを設定したメモ。

//「/20●●/」にマッチした場合だけRouteを設定
$uri = env('REQUEST_URI');
if(preg_match('/^(/)(20d{2})/',$uri,$matches)){
    if(isset($matches[2])){
        $year = $matches[2];
        Route::middleware(['my_middleware'])->prefix($year)->group(function ($router) {
            Route::get('/','HomeController@index')->name('home.index');
                ・
                ・
                ・
        });
    }
}

PHPSpreadsheetでメモリ食いすぎておちるので、メモリ解放する方法

PHPSpreadsheetでメモリ食いすぎておちるので、メモリ解放する方法

デストラクトのメソッドがあるのでそのままCallするだけ。

$spreadsheet->__destruct();

Laravelで selectタグのオプションに使うリスト取得 (CakePHPの ->list()の様に)

Laravelで selectタグのオプションに使うリスト取得 (CakePHPの ->list()の様に)

laravelでは Model::pluck()をつかう。

//Groupモデルの場合
Group::pluck('name','id');
や。
Group::pluck('label','group_id');
など先にvalueになる内容 / 後にkeyになるフィールド

//例) 以下の様に取得
1 => 管理者
2 => 一般ユーザー
3 => ゲスト

Laravelで、CakePHPのHash::combineみたいに、ネストの配列を取得

Laravelで、CakePHPのHash::combineみたいに、ネストの配列を取得

CakePHPのHash::combineみたいに取得したかった。
CollectionクラスにmapWithKeysがありそれっぽくできる。

MyModel::get([$key,$label])->mapWithKeys(function($item) use($key,$label) {
        return [$item[$key] => $item[$label]];
})->toArray();

PHPStormで親クラスのメソッドをオーバーライドするショートカット

PHPStormで親クラスのメソッドをオーバーライドするショートカット

Command + O (Macの場合)

選択のダイアログ

選択のダイアログ

以下のようにparentの呼び出し+TODOコメントまでついてラクラク。

    public function getMiddleware()
    {
        return parent::getMiddleware(); // TODO: Change the autogenerated stub
    }

手打ちだと、1分くらいかかるとするとだいぶ早い。

Laravel 初期セットアップやることメモ

バージョンを決める。

基本PHPに合わせるが、PHP7以上でないとな感じ(Laravel5.5以上で使いたい)
PHP7.0だと最新は使えないが、現在最終のLTS(Long-term Support)の5.5が使えるのでそこを使う。

希望としてPHP7.1以上で最新を使っていきたい気もする。

PHP7.0 > 7.2であまり大きな変化は無いようだけど、HTMLメール作成でエラーがでて使えないことがあった(原因がプログラムなのかフレームワークなのかは調べてない)

Laravelのインストール

composerでサクッと対象バージョン入れる

デプロイ/サーバー環境セットアップ

  • ステージング/プロダクションのデプロイ設定(いつもはrsync)
  • パーミッションも
//グループの場合によって 770とか
$ chmod -R 777 ./storage
$ chmod -R 777 ./bootstrap/cache
  • .envの設定(ローカル/リモート)
    APP_NAMEとか、APP_ENVとか、DBの設定とか

  • config/app.php設定

//日本化
    'timezone' => 'Asia/Tokyo',
    'locale' => 'ja',
    'fallback_locale' => 'ja',
//ログ設定(config/app.php) ログをdailyに
    'log' => env('APP_LOG', 'daily'),
    'log_level' => env('APP_LOG_LEVEL', 'debug'),
    'log_max_files' => '90',
    
  • app/Providers/AppServiceProvider.php
//Slackへ流すエラーログなど
    public function boot()
    {
        //ログ設定 
        $token = env('SLACK_API_KEY');
        $channel = env('SLACK_API_CHANNEL');
        //Error以上はSlackに流す
        Log::listen(function ($event) use ($token) {
            $monolog = Log::getMonolog();
            $handlers = $monolog->getHandlers();
            $slackHandler = new SlackHandler(
                $token,
                $channel,
                env('APP_NAME'),
                'log',
                false,
                Logger::ERROR,
                false,
                true,
                true);
            array_push($handlers,$slackHandler);
            $monolog->setHandlers($handlers);
        });
    }
    
  • 一旦設定が終わったら簡単に動作するかを見る。

リポジトリ設定

リモートを置く/またはローカルのみ

モデル関連

artisanでモデル/コントローラーをすべて作成。

$ php artisan make:model  Client  -r --controller

カスタムバリデーション

カスタムバリデーションを準備

パッケージ類

//インストール
$ composer require "laravelcollective/html":"^5.5.0" // 今回はlaravel5.5に合わせて5.5.0を指定
$ composer require monolog/monolog
$ composer require spatie/laravel-backup
$ composer require intervention/image
// config/app.phpに追記
    //providers
        Intervention\Image\ImageServiceProvider::class,
        Collective\Html\HtmlServiceProvider::class,
        Spatie\Backup\BackupServiceProvider::class,
    //alias
        'Image' => Intervention\Image\Facades\Image::class,  
        'Form' => Collective\Html\FormFacade::class,
        'Html' => Collective\Html\HtmlFacade::class,
バックアップの設定

//バックアップ設定ファイルを生成
$ php artisan vendor:publish --provider="Spatie\Backup\BackupServiceProvider"
→コピーしてと言われるのコピー
$ cp ./vendor/spatie/laravel-backup/config/backup.php ./config/backup.php 

// バックアップ設定ファイル(config/backup.php)を編集→こちらは必要に応じて
'to' => env('MAIL_SYSTEM_ADMIN') とか。

//バックアップのテスト
$ php artisan backup:run --only-db  //DBのみ
→storage/app/Ryunavi/に保存される。
→通知メール設定していたら送信される(.envのメールの設定をたまに忘れる)

ミドルウェア関連

//ミドルウェア作成
$ php artisan make:middleware MyApp
// app/Http/Kernal.phpに追加
    protected $routeMiddleware = [
        'myapp' => \App\Http\Middleware\MyApp::class,
    ];

Auth関連

たとえば user,admin,clientがある場合。

//config/auth.phpに追記、guardsとproviders
    'guards' => [
        'web' => [
            'driver' => 'session',
            'provider' => 'users',
        ],

        'api' => [
            'driver' => 'token',
            'provider' => 'users',
        ],
    
        'user' => [
            'driver' => 'session',
            'provider' => 'users',
        ],
        'client' => [
            'driver' => 'session',
            'provider' => 'clients',
        ],
        'admin' => [
            'driver' => 'session',
            'provider' => 'admins',
        ],
    ],
------------------------    
   'providers' => [
        'users' => [
            'driver' => 'eloquent',
            'model' => App\User::class,
        ],
        'clients' => [
            'driver' => 'eloquent',
            'model' => App\Client::class,
        ],
        'admins' => [
            'driver' => 'eloquent',
            'model' => App\Admin::class,
        ],    

Helper設定

独自ヘルパ関数などをまとめたファイル読み込み

//composer.jsonのautoloadにfiles追記読み込むファイルHelper.phpを追加して
"autoload": {
        "classmap": [
            "database/seeds",
            "database/factories"
        ],
        "psr-4": {
            "App\\": "app/"
        },
        "files": [
            "app/Helper.php"
        ]
    },

//autoloadをダンプ →読み込まれるようになる
$ composer dumpautoload


//app/Helper.phpに独自ヘルパ関数などを定義していく。
if (!function_exists('mb_trim')) {
    function mb_trim($str)
    {
        return trim(mb_convert_kana($str, "s"));
    }
}
if (!function_exists('h')) {
    function h($str)
    {
        return htmlspecialchars($str, ENT_COMPAT);
    }
}
if (!function_exists('h_attr')) {
    function h_attr($str)
    {
        return htmlspecialchars($str, ENT_QUOTES);
    }
}



Route設定

prefixなど設定

Page 1 of 38

Powered by WordPress & Theme by Anders Norén