2016-12-20

ファビコンを自動でつくってくれるサイト「Favicon Generator」を使ってみた。

サイト開発をしていて結構めんどくさい作業なのがファビコンの作成です。
特にこだわらない場合は favicon.ico というファイルを ico 形式の画像を作ってリンクすればいいだけですが、iPhoneなど様々な機種に対応させたい場合は個別に画像を用意してその全てにリンクなど HTML タグを追加しなければいけません。

そこで紹介するのが「Favicon Generator」です。

このサイトは画像を送信するだけで、様々なサイズのファビコンを作成してくれるというとても便利なサイトです。
また、必要なHTMLタグも表示してくれるので、それらをコピーするだけで設定も完了します。

では、作り方をひとつひとつ見ていきましょう。


1.画像のアップロード

画像の赤枠にあるボタンをクリックしてファビコンにしたい画像を選択します。

※注: 最低でも 70 x 70 px 以上の画像を選んでください。推奨は260 x 260 px 以上です。



2.ファビコンの設定をする

ここから iPhone など各機種向けの設定をします。

注意が必要なのは iOS です。
iOS のアイコンは透過画像に対応していません。
そのため、もしファビコンに png などの透過画像が利用されている場合、背景が真っ黒になってしまします。

これを防ぐためには以下の赤枠のラジオボタンにチェックを入れ、その下の色の設定を変更する必要があります。


その他 chrome や windows の設定ができますが、同じように設定を変更すると自動でサンプル画像が変更しますのでお好みの設定に変更してみましょう。

なお、もしファビコンをルートフォルダに設置したくない場合は、最後の項目で調整ができます。(ルートでいい場合はに特に設定する場合は必要ありません。)



3.ファビコンの作成

さぁ、それではファビコンを作成しましょう。
一番下にある以下のボタンをクリックすることで実行できます。


4.ファビコンのダウンロードと設置


まず「Download your package.」の横にある「Favicon package」ボタンをクリックするとダウンロードが始まりますので適当な場所に保存してください。
そして、保存した zip ファイルの中にあるファイル全てをサイトのルートフォルダへ展開します。
(つまり、http://example.com/favicon.ico にアクセスできるようになればOKです)

次に2個めの赤枠内の HTML コードを <head>〜</head>内に書き込みましょう。
これで設定は完了です。

5.テスト

もしきちんと設置されたかをテストしたい場合はチェックコンテンツも提供されていますので使ってみることをおすすめします。


なお、元になるファビコン画像を作りたいときは font-awesome で画像が作成できる fa2pngが便利です。 

今回は以上です。
おつかれさまでした。

2016-12-08

Laravel で全 view からログイン中のユーザー情報を取得する

Laravel を利用して開発をしていると、まだまだ全ての機能を使いきれていないことに気付かされることがあります。
ということで今回は ViewComposer を使って、どのビューからでもログイン中のユーザーにアクセスできるようにしてみたいと思います。

【実行環境】Laravel 5.3


手順は以下の3つです。
  1. ViewComposer を作る
  2. ServiceProvider を作る
  3. ServiceProvider を登録する

ではひとつひとつ見ていきましょう。

1. ViewComposer を作る

まず ViewComposer の作成です。
デフォルトでは専用のフォルダは用意されていませんので app/Http/ViewComposers というフォルダを新たに作成しましょう。
そして、その中に AuthViewComposer.php というファイルを作成&以下のコードを保存します。
 <?php namespace App\Http\ViewComposers;  
 use Illuminate\View\View;  
 class AuthViewComposer  
 {  
   protected $user;  
   public function __construct()  
   {  
     $this->user = \Auth::user();  
   }  
   public function compose(View $view)  
   {  
     $view->with([  
       'user' => $this->user  
     ]);  
   }  
 }  


2.ServiceProvider を作る

次に専用の ServiceProvider を作ります。
app/Providers/ViewComposerServiceProvider.php を作成&以下のコードを保存してください。
 <?php namespace App\Providers;  
 use Illuminate\Support\ServiceProvider;  
 class ViewComposerServiceProvider extends ServiceProvider  
 {  
   public function boot()  
   {  
     \View::composers([  
       \App\Http\ViewComposers\AuthViewComposer::class => 'layouts.*'  
     ]);  
   }  
 }  
※ ちなみに layouts.* の部分ではどの view に適用するかを設定することができます。


3.ServiceProvider を登録する

最後は先ほど作った ViewComposerServiceProvider を config/app.php へ登録します。
 'providers' => [  
   App\Providers\ViewComposerServiceProvider::class,  
 ],  

さあ、以上で設定は完了です。好きな view の中で {{ $user->email }} という風にユーザー情報にアクセスしてみましょう。
なお、念のために、以下のコマンドを実行しておくといいかもしれません。
 composer dumpautoload -o  

今回は以上です。
お疲れ様でした。



2016-11-10

Wikipediaを使って関連キーワード抽出プログラムを作ってみる

関連キーワードが必要になった

現在取り組んでいるプロジェクトの中で、キーワードを入力すると関連するキーワードを

「このキーワードもおすすめですよ」

という具合で表示する機能が必要になりました。

はじめはGoolgeのSuggestを利用すればいいかなと安易に考えていたのですが、この方法では関連するキーワードではなく、追加キーワードの提案という形になってしまいます。

実際の例をご覧ください ⇛ 「明石家さんま」をGoogle Suggestで検索

そうではなく、結果としては「明石家さんま」で検索すると「ビートたけし」や「タモリ」などといった関連するキーワードを取得したかったのでGoogle Suggest の利用は見送ることにしました。
(また、Googleに限らずAPIなどの提供は廃止されるリスクが常につきまとうという理由もありました。)

おもしろいアプローチを見つける

そこで、他の方法はないかとネットを探っているとひとつおもしろいアプローチをしている人がいました。それが以下のページです。

 [Yahoo!WebAPI+TwitterAPI]2つのAPIを組み合わせて関連キーワード抽出ツールを作ってみる

※ブログ記事、カッコ良かったのでオマージュさせていただきました。m_ _m


このページが提案している方法は以下になります。

1.まず Twitter API を使って検索したいキーワードのツイートを取得
2.Yahoo API のキーフレーズ抽出を使ってそのツイートから共通するキーワードを取得する
3.頻出する言葉が関連キーワード

つまり、検索するキーワードと一緒に使われている言葉を抽出するというアプローチです。

早速やってみた、、、しかし!

なるほど。
賢い人がいるものだなと感心し、実際に私もこのアプローチを試してみました。

・・・が!
結果はうまくいきませんでした。

なぜなら、現在Twitter に投稿されるものは無差別投稿しているものも多く、全く関連しないキーワードばかりが抽出されてしまったからです。

しかし、一緒に使われている言葉を抽出するというアプローチ自体はとても良い方法なのでなんとかTwitter以外の方法で考えてみることにしました。

YoutubeやHatena...
どれも納得できるような結果にはなりませんでした。

加えて、やはりAPIはそのうちにサービスが終了してしまうリスクも心にひっかかりこれら方法も断念しました。

そうだ wikipedia を使おう

そして、最終的に考えだしたのが Wikipedia を利用する方法でした。
流れとしては以下になります。

1.検索キーワードのことが書かれたwikipedia のページを読み込む
2.共通するキーワードを抽出(サイト内リンクのテキストを正規表現を使って取得)
3.集計して数が多いものを関連キーワードとする

この方法だと、APIが終了することはないですし読み込むページも1ページのみでいいのでレスポンスも早くすることができます。

さらに、関連語の抽出具合もより精度が上がったように思います。
以下は「明石家さんま」で検索した例です。
  • FNS27時間テレビ
  • ビートたけし
  • FNSの日
  • タモリ
  • 島田紳助
  • SMAP
  • さんま・中居の今夜も眠れない
  • フジテレビジョン 
  • 笑福亭鶴瓶
  • 所ジョージ 
※ちなみに以下のようなキーワード(リンク)は必要ないのでフィルターをかけて抽出しないようにしました。

1.Template: や Help: など wikipedia の特殊なリンク
2.年月日のみのリンク

ということで、このプログラムをクラス化しGitHubで公開していますので、実際のソースはそちらをご覧ください。

※ちなみに上記プログラムではHTTPアクセスにはGuzzleのバージョン6を利用しています。composerを利用してインストールする方法が楽かと思いますが、もしGuzzleを使いたくない人は file_get_contents() に書き換えて利用してみてください。

デモを見る


以上、Wikipediaを使って関連キーワードを抽出する方法でした。




2016-11-01

【Stripe】PHPで課金するための基本設定

課金サービスを簡単に組み込めるサービスとして、審査も必要がなくとても手軽な「stripe」に注目しています。
この記事を投稿する少し前まではトップページにはベータ版だとの記述がありましたが現在はそれもなくなり、本格的に日本でもリリースがされたようです。

そこで、今回は stripe で月額課金を利用するために必要な基本的な設定とアクセスキーの取得法を備忘録として投稿したいと思います。



1.まずはアカウントの作成

以下のURLからアカウントを作成しましょう

https://dashboard.stripe.com/register


2.月額課金するプランを作成

メニューリンクの中から「Plans」をクリックし、その後ページ右上にある「New」をクリックします。


以下のようなプラン作成フォームが表示されます。
最低限必要な項目は以下になります。

  1. ID (←プログラム上で利用する識別IDです。)
  2. Name (←課金名。見てわかりやすい名前をつけましょう)
  3. Currency (←通貨。JPYが日本円です。おそらくデフォルトです)
  4. Amount (←課金額。いくら課金するか?です)
  5. Interval (課金する間隔) 
入力したら、「create plan」 をクリックして保存します。


3.アクセスキーを取得する

ページ右上にある「Your Account」の中にある「Account Settings」をクリック。


現れたダイアログの中にある「API Keys」をクリックすると以下のようにアクセスキーが表示されます。

上がテスト用のキー。
下が本番用のキーになります。



以上がAPIに必要な設定&キーの取得になります。

実際にPHPに組み込むためにはライブラリが用意されていますのでそちらをつかうといいでしょう。

https://stripe.com/docs/libraries#php-library
https://github.com/stripe/stripe-php

Laravelを使っている場合はCashierというパッケージが本家Laravelによって提供されていますのでこちらを使う方がいいでしょう。

https://laravel.com/docs/5.3/billing#stripe-configuration


以上になります。

※それにしてもドンドン便利なサービスが増えてきていろいろな事が簡単にできるようになってきています。それだけ可能性が広がっているということなので今後も楽しみですね。^^



2016-09-10

PHPで国コードとその他情報を取得するクラスを公開しました

最近ウェブサイトの開発のご相談を頂く際にグローバルな視点で物事を考えているクライアント様方が増えてきたように思います。

その中で度々懸案事項となっていたことは、国コードを管理できるパッケージがあまり見つからないということでした。(あるのはありましたが、残念ながら日本語/英語の国名、2桁コード、3桁コード、数字コードが揃っているものではありませんでした)

そこで!
今後のことを考え独自に ISO 3166-1 をベースとしたパッケージを作成し、公開しました。
以下よりダウンロード or Composer によるインストールが可能です。

GitHub | SUKOHI/CountryCode

今回はフレームワークのパッケージではなく、純粋なPHPパッケージとしての公開ですので、いろんな環境でご利用いただけると思います。
みなさんのお役にたてたら嬉しいです(^^)


ちなみに、取得できるデータの例としては以下のような感じです。

【日本の例】

国コード(2桁) ・・・ JP
国コード(3桁) ・・・ JPN
数字コード ・・・ 392
国名 ・・・ Japan(英語)、日本(日本語)

実際の使い方はGitHubの方でご覧ください。

※なお、もし英語、日本語以外で国名を翻訳できる方は「assets/csv/country_codes.csv」にデータを追加するだけで新しい言語に対応ができます。よかったら GitHub にて Pull Request していただけるとなお嬉しいです! m_ _m

ではでは〜。
(最近ブログ記事をさぼってしまっているので時間を見つけて更新しなければ!)


2016-06-22

FlysystemをLaravelで使う

開発サイトの規模が大きくなってきたり、よりセキュアなサーバー環境を整えるためにサーバーを「ウェブサーバー」と「データサーバー」で物理的に分割する場合があると思います。

そして、PHPでファイルをリモートで読み込み/書き込みをするためには「Flysystem」という有名なパッケージを利用すればとても簡単にできるのですが、今回はこの「Flysystem」をLaravel(5.2)で使う方法をお届けしたいと思います。

※ちなみに今回はSFTPを使ってリモートサーバーとの連携をしますが、Flysystemは他にもaws」や「Azure」、その他には「DropBox」との連携までサポートしています。


【環境】

Laravel 5.2
SFTPで自分のVPSへSFTPを使って接続

【インストール】

まずは composer でパッケージのインストールです。
ここではLaravelと統合されているものをインストールします。
(ちなみにGitHubはこちら)
composer require graham-campbell/flysystem
次に私の場合はSFTPでの接続ですので、Flysystemのサブパッケージをインストールします。
league/flysystem-sftp:^1.0
はい。これでインストールは完了です。


【準備】

いつものように ServiceProvider と aliases を config/app.php に設置しましょう。

(ServiceProvider)
 GrahamCampbell\Flysystem\FlysystemServiceProvider::class  


(Aliases)
 'Flysystem' => GrahamCampbell\Flysystem\Facades\Flysystem::class  


そして、以下のコマンドで専用の設定ファイルを publish します。
php artisan vendor:publish
実行すると、configフォルダの中に「flysystem.php」というファイルが作成されていると思いますのでこの中で接続情報を保存します。

※もしコマンドを実行しても flysystem.php が作成されない場合は、以下のコマンドを実行してからもう一度トライしてみてください。
  • composer dumpautoload -o
  • php artisan config:cache

では、実際の中身です。

今回はSFTPでの接続なので「SFTP」のエリアを探して、必要な情報を入力すればOKです。
変更する場所としては、

  • host(IPアドレスなど)
  • port(変えている場合)
  • username
  • password
  • privateKey(プライベート・キーファイルのパス)
  • root(リモートサーバーの保存したいフォルダパス)

あたりになるかと思います。

はい、これで設定は完了です。


【使い方】

(基本的な使い方)

使い方はとても直感的でシンプルです。
次の例は、「test.txt」というファイルを作り、さらにそこに「bar」という文字列を書き込む手準になります。

 \Flysystem::connection('sftp')->put('test.txt', 'bar');  

たったこれだけです。
では逆にその保存した内容を読み込んでみましょう。

 echo \Flysystem::connection('sftp')->read('test.txt');  

これで「bar」が表示されます。


(フォルダを指定して保存)

もし、フォルダを指定して保存したい場合はこのようになります。

 \Flysystem::connection('sftp')->put('test_dir/test.txt', 'bar');  

この場合は、test_dir/test.txt にファイルが保存されます。


(画像を保存)

これもテキストファイルなどとやり方はほぼ同じで、

 $content = file_get_contents(public_path('images/my_photo.jpg'));  
 \Flysystem::connection('sftp')->put('me.jpg', $content); 

とやればOK。
とてもシンプルです。

ちなみに、Laravelを使って保存した画像をサーバーから呼び出して表示するには以下のようにすればいいでしょう。

(コントローラ)
 public function flysystem_image() {  
      $image_contents = \Flysystem::connection('sftp')->read('me.jpg');  
      return response($image_contents, 200)->header('Content-Type', 'image/jpeg');  
 }  

以上、Laravel と Flysystem を使ったサーバーの連携方法でした。
ではでは!



2016-06-09

受信したメールをLaravelで受け取る

受信メールをPHPプログラムへ送り、メールを解析して送信元のメールアドレスや本文を取得してDBに保存ということをLaravel(5.2)をからめてやるにはどうすればいいかをメールサーバーをたてるところからやってみたので備忘録としてお届けします。
(はっきり言って作業内容は多かったです、、^^;)




【作業環境】

CentOS 6.7


【作業の手順】
  1. Postfix をインストール/設定
  2. ドメインのDNS設定
  3. Pecl(Pear)本体をインストール
  4. Pecl の mailparse をインストール、extensionの読み込み
  5. Laravelパッケージ「php-mime-mail-parser」をインストール
  6. LaravelにCommandを追加

【実際の作業】

では、ここからは実際の作業になりますが、全部書くと確実に長くなってしまいますので途中は参考にしたサイトを紹介しながらすすめていきます。

1. Postfix をインストール/設定

私の場合はCentOSなので
sudo yum install postfix
でインストールしましたが、環境によって変更してください。
また、設定の方法は以下のページがとてもわかりやすいと思いますのでぜひ参考にしてみてください。


また、この記事の中にも紹介されていますが、設定が完了したら以下のサイトでセキュアチェックができます。


そして「/etc/aliases」をエディタで開き、以下のような振り分け設定を追加しましょう。

mail: "| /usr/bin/php /path/to/your/public/folder/example.com/artisan mail:parse"

意味としては

  • mail・・・はユーザー名。つまり、mail@example.comでメール受信した場合の設定ですよという意味です。
  • /usr/bin/php(以下略)・・・PHPを使ってLaravelのartisanを実行
  • mail:parse・・・実行するコマンド(「6.LaravelにCommandを追加」で作る独自コマンドです)

完了したら、 sudo postalias /etc/aliases でエイリアスをアップデートします。
そして、最後に sudo service postfix reload でpostfixをリロードで完了です。


2.ドメインのDNS設定

これも人によって記述が違うと思いますが私の設定は以下のようにしています。
mx mail.example.com. 10
a * 01.234.567.890
txt @ v=spf1 a:example.com ~all
2行目はIPアドレスです。
※ちなみにこれはサーバー設定ではなく、取得したドメインの管理サイトで設定をします。


3.Pecl(Pear)本体をインストール
sudo yum install php-pear
ここは戸惑いました。
Peclをインストールするにはpearをインストールするんですね。
(その昔、mecabをインストールしたことあるのに...)

なお、リポジトリを設定しないとパッケージが見つからないかもしれません。


4. Pecl の mailparse をインストール、extensionの読み込み
pecl install mailparse
でメール解析に必要な mailparse をインストールします。
ただ、もしかすると
The php-devel package is required for use of this command.
というエラーがでてインストールできないかもしれません。
そのときはエラーの表示にある php-devel をインストールしてからやってみてください。

では、インストールした mailparse を PHPが利用できるように設定をしましょう。
ファイルを作成する場所は php.ini の「Additional .ini files parsed」でリストに出てくるフォルダです。



たとえば、もし「/etc/php5/apache2/conf.d/05-opcache.ini」が表示されているとするなら「/etc/php5/apache2/conf.d」がそのフォルダになります。

ではここに mailparse.ini というファイルを作成し、以下の内容を保存します。
php extension=mailparse.so
はい。
これでmailparseの設定は完了です。
ウェブサーバーを再起動してもう一度 phpinfo を確認すると以下のようにmailparse が表示されているはずです。



5.Laravelパッケージ「php-mime-mail-parser」をインストール

これはとても簡単です。
composer で一気にインストールできます。
composer require php-mime-mail-parser/php-mime-mail-parser
ちなみに、パッケージがあるなら mailparse は要らないんじゃ?と思った方。
私もそうでした。
でも、実際は mailparse を前提にしたパッケージなのでやはり Pecl他は必要なんです。^^;

※GitHubのページはこちらです。


6.LaravelにCommandを追加

やっとここまで来ました。
コマンドの作成/設定方法は本家Laravelページで確認してください。

コマンドの中身は以下のようになります。
$parser = new Parser();
$parser->setStream(fopen('php://stdin', 'r'));
あとは、以下のような便利なメソッドが備わっているのでこれを使ってメールを思うように加工してください。
$to = $parser->getHeader('to'); // 送信先
$addressesTo = $parser->getAddresses('to'); // 送信先(配列)
$from = $parser->getHeader('from'); // 送信元
$addressesFrom = $parser->getAddresses('from'); // 送信元(配列)
$subject = $parser->getHeader('subject');  // 件名

$text = $parser->getMessageBody('text');   // 本文(テキスト)
$html = $parser->getMessageBody('html');   // 本文(HTML
$htmlEmbedded = $parser->getMessageBody('htmlEmbedded');   // データを含む本文(HTML
添付ファイル

添付ファイルの扱い方は以下になります。

(保存)
$parser->saveAttachments('/path/to/save/attachments/');

(ループ)
$attachments = $parser->getAttachments();
if (count($attachments) > 0) {
   foreach ($attachments as $attachment) {
      $filename = $attachment->getFilename();
      $path = '/path/to/save/attachments/'. $attachment->getFilename();
      $type = $attachment->getContentType();
   }
}

ということで、環境の違いもあるので全てを一気にやろうと思うとなかなか難しいかもしれませんがこんな感じで受信メールをLaravelで受け取ることができます。

お疲れ様でした。

【その他参考にしたページ】

https://sboersma.nl/blog/setting-up-postfix-and-pipe-incoming-emails-to-laravel




2016-05-25

【無料】サイトが落ちていないか監視

サイトの運営を行っている人間からすると一番怖いのは「サイトが落ちる」こと、つまり訪問者がアクセスしてもページにエラーが出て表示がきちんとできていない状態です。

こうなってしまうと、もんろん訪問者は(もしかすると舌打ちしながら)すぐに違うページへ移動してしまいほぼ二度とはやってくることはないと思います。

そのためサイトが落ちていないかどうかは定期的にチェックをするべきですが、さすがに毎日毎日となるとなかなか面倒なもの。

そこで、そういう時にはサイト監視サービスを使ってみましょう。
インターネット上には制限こそあるものの無料でも利用できる監視サービスが幾つか存在しているので、その中から一つをご紹介したいと思います。

名前は「Uptime Robot」です。

まずは以下が3つの特徴になります。
  • 最短5分ごとにサイトをチェックできる
  • https でのアクセスも可能(他のサービスでは有料のところもあります)
  • 無料でも使える(最大50ページまで監視が可能)
では登録と設定方法を見ていきましょう。


【ユーザー登録】

まず、ユーザー登録ページ へアクセスしユーザー登録します。


上から、
  1. 氏名
  2. メールアドレス
  3. パスワード
になります。

入力して「Sign-up」をクリックすると入力したメールアドレスに本登録用のURLが書かれた以下のようなメールが届くのでこれ(clicking hereの部分)をクリックしてください。


これでユーザー登録は完了です。


【設定】

では、早速ログインページからログインしたら、まずは設定をしましょう。
ページ上部にある「My Settings」をクリック。


1.タイムゾーン

ページ中程にあるタイムゾーンを東京へ変更しUpdateをクリック。


 ※もしサイトからのお知らせメールが必要ない場合は「Inform me about new features and updates (no more than twice a month).」のチェックを外しておきましょう。

また、通知を受け取りたいメールアドレスが他にもある場合は以下を参考にして追加しておきましょう。

2.通知先メールアドレスの追加

「Add Alert Contact」 をクリック。 

 以下のようなダイアログが表示されるので
  1. Alert Contact Type を E-mail に設定
  2. Friendly Name は区別しやすい好きな名前を入力
  3. E-mail に通知先メールアドレスを追加
  4. Create Alert Contactを クリック


【監視サイトの追加】 

 ホーム画面に戻って「+ Monitor」をクリック。


 以下のようなダイアログが表示されるので監視したいサイトの各種データを入力します。


  1. Monitor Type ・・・ HTTP(s)を選択
  2. Friendly Name ・・・ 区別しやすい名前
  3. URL (or IP) ・・・ 監視したいページのURL
  4. Monitoring Interval ・・・ 何分毎にページをチェックしたいか?
  5. (任意)Authentication Settings ・・・ おそらくページ監視時に送信するデータがある場合に利用できるものだと思いますが、通常は必要ないでしょう。
 (通知先メールアドレス)

 あとは通知したいメールアドレスにチェックを入れて「Create Monitor」をクリックすれば完了です。
もし他にも登録したいURLがある場合は同じ作業を繰り返し行ってください。

もしサイトが落ちていたら通知がきますし、ホーム画面で統計データを見ることができます。

以上、サイト監視ができる Uptime Robot の紹介でした。
皆さんもぜひ一度試してみてください。

私がフェイスブック・アプリを削除した理由と対処

私は2012年からフェイスブックを利用しています。始めたころ私はカナダのバンクーバーに語学留学中で、初めて登校したとき先生から「友達とやりとりするようになるから(英文を書く習慣がつくから)絶対登録しなさい」と言われ半ば嫌々登録したのを覚えている。

まだその頃は周りではミクシィをやっている人が多く、フェイスブックをやってるよ、という人はまだ少なかった。

それがあれよあれよという間にフェイスブックの知名度が日本でも高くなり、そのうちミクシィよりもフェイスブックのアプリを開く時間の方が多くなってしまった。(私の場合、帰国後もカナダで会った友達のニュースを仕入れるにはフェイスブックに頼るしかなかったというのも大きな理由の一つだ)

ちなみに私は今でも1〜2日ぐらいの頻度でフェイスブックをチェックする。

ただ、それでもフェイスブックのアプリはこの度アンインストールしてしまった。

理由は2つ。

まず、あまりハイスペックとはいえない私のスマートフォンではフェイスブックのアプリをアップデートする際はとても時間がかかり、また不具合なのかもしれないがアップデートこの後は再起動をしなければいけない場合もあった。

しかも幸か不幸かフェイスブックの開発スタッフはとても熱心で、ことあるごとにアプリをアップデートしてくれるからやっかいだった。

さすがにもう毎回作業するのが面倒になり、自動でアップデートしない設定にもしてみたが結局はこの理由が大きく、アプリを削除してしまった。

そして、もう一つの理由はバッテリーの消費だ。

以下の記事だとフェイスブック・アプリによって電池消耗が20%も増えると書かれてある。


携帯式バッテリーは過去に持っていたが紛失して以降全く使っていない私にとってはこれも都合が悪いものとなってしまった。

【アプリ削除後の対処】

では、今でもフェイスブックを開く私がとった対処とはなんだったのか?

もうお気づきかもしれないが、そう、PCと同じくスマートフォンのブラウザでログインすることにしたのだ。

こう書くと「いちいちブラウザを開いてフェイスブックを検索し、さらにログイン情報まで入力するのは面倒すぎる」という意見があるのかもしれない。そのとおりだと思う。

なので、この問題を以下のようなテクニックで対処した。

  1. まず初めてブラウザでフェイスブックにログインする場合にパスワードを保存するかと聞かれると思うのでこれを保存する。(以降、ログインする必要はなくなる)
  2.  ログインしたらブラウザのメニューの中からホームスクリーンにショートカットを作成する。
これで今までのアプリと同じようにアイコンをタップするだけでフェイスブックにログインした状態でブラウザがURLを開いてくれるというわけだ。

では、使用感はどうか。
残念ながらやはりネイティブアプリの方が動きはスムーズだ。フェイスブックがその昔HTML5を利用したアプリ開発をやめた理由がよくわかる。

ただし、とは言ってもブラウザの方も進化していることは確かで、そこまでイライラさせられることがないというのも事実だ。私のようなライトなフェイスブックユーザーであればなんの問題もないかと思う。

さらにこれはまだ未確認だが、私が使っているChromeは現在プッシュ通知にも対応しているそうなのでもしかしたら「今日はお友達のお誕生日ですよ」などと通知をしてくれるのかもしれない。
ということで、フェイスブックはまだもう少し続けそうだが、アプリの方はもう使わないようになりそうだ。

と、いっても最近は世界中の友達もフェイスブック自体をやらなくなってきているし、私自身が最後にフェイスブックに投稿したのももう半年ほど前になる。

だからといって、Lineのタイムラインに移行するつもりもないのでそのうち本格的にSNSは卒業するかもしれない。

今後SNSがなくなることはないだろうが、一時期ブームになったのはやはりそういう時代だったから、というのが私のSNSに対するものの捉え方だ。

2016-05-24

n倍でループ【PHP】

PHPに限らずプログラムで開発をするよく使うものの一つに for() ループがあると思います。
今回はいつもとは少し変わったループの仕方を紹介したいと思います。

通常でしたら、以下のように $i++ インクリメントを使って1ずつ変数を追加していくパターンを使うかと思います。
for($i = 0 ; $i < $count ; $i++) {
    // ここで何かの処理
}

もしくは逆に $i-- を使って変数を減らしていく方法もたまに使うのではないでしょうか。
for($i = 5 ; $i > 0 ; $i--) {
    // ここで何かの処理
}

では、今回は for() ループを nの倍数ずつループさせる方法はどうなるでしょうか。
いろいろな方法があると思いますが、ひとつの答えとしては以下のようなものもあります。
$n = 3;
$count = 15;

for ($i = 0; $i < $count; $i+=$n) {
   echo $i ."\n";
}

実行結果としては、以下になります。
0
3
6
9
12
ではひとつずつ中身を見て行きましょう。


$n = 3
これは何倍ずつループするかです。
つまりループを3、6、9...という形にしたい場合は「3」になります。

$count = 15;
最大値はいくらかになります。
つまり、もし15を含めたい場合は $count = 16; に変更するか
for() 内の $i < $count$i <= $count へ変更する必要があります。

ここまでは通常の for() ループを同じですね。
では次。

for ($i = 0; $i < $count; $i+=$n) {}
  1. $i = 0 ・・・初期値が0
  2. $i < $count ・・・ 最大値
  3. $i+=$n ループのたびに倍数を追加
ここが今回の特徴的な部分です。 
$i++ の代わりに $i+=3 を使ってループ内の変数を倍数にしています。

はい。
短いですが、以上解説でした。


【終わりに】
通常はあまりこのようなループを使うことは無いでしょうし、だとすると「正直可読性悪いんじゃ、、、?」と言われると確かにそのとおりですが、これもひとつのアイデアなのかなと思い紹介してみました。(もしかすると結構使われてるのかな?)

今回は以上です。




2016-05-19

開発者のブラウザ「Blisk」を使ってみた感想

ウェブ開発をしていて時々必要となってくる要件にPC、モバイルともに対応可能な「レスポンシブ・デザイン」というものが増えてきました。現在はPCが家になく、スマホだけ持っているという人も多くいるため、「モバイル・ファースト」に主眼をおいておられるクライアント様も多くいらっしゃいます。

そこで、今回紹介するのは「Blisk」というブラウザです。
このBliskは「開発者のためのブラウザ」 と銘打っているだけあって、ひとつの画面の中でスマートフォンやタブレットの画面を確認することができるとのことでした。
忙しい時期ですが、業務の効率化を考えて時間を割いて少し体験してみました。


【ブラウザの外観】


必要なものだけが用意されている印象です。余計なものは必要ではない開発者としてはありがたいと思いました。
ちなみに左側からスマートフォンやタブレットを選択するとすぐに画面が切り替わります。
また、左側のエミュレーター部分ではマウスは黒丸に変更されタップやスワイプの動作となります


【操作感】

エミュレーターでよくある表示が遅くなることやひっかかりを感じることはほぼありませんでした。
(私の場合はVirtualBoxで実行したので通常のWindowsでしたらまた違っているかもしれません)

ただ、サイトによっては違うのかもしれませんが、スライダーなどの横スワイプが効かなったことが残念でした。
また、モバイル対応していないページでは通常のブラウザとして利用できるのは好感がもてました。
別のブラウザを開いて検索する必要はありませんので。

もちろん開発者ツールも使えます。



【設定できるスマートフォン/タブレット機種】
  • IPhone 4
  • IPhone 5
  • IPhone 6
  • IPhone 6 Plus
  • Nokia N9
  • Galaxy S3
  • Galaxy S4
  • Nexus 4
  • Nexus 6
  • Nexus 7
  • Nexus 10
  • IPad mini
  • IPad Air Retina
これだけそろっていれば必要なものは揃っているのではないでしょうか。


【今後の開発予定】

これが少し楽しみですが、どうやら以下のように画面のビデオ録画機能を予定しているようです。



 【実行環境】

現在までのところ windows のみしかありませんがMac、Linux版も予定しているようです。


【Bliskを使ってみて】

全体的に使いやすくていいソフトだなと思いました。
モバイル主体の開発があれば利用してみてもいいかなという感じですが、今のところ windows版のみとのことでしたので、私のLinuxの開発環境だといちいち VirtualBox を開かなくてはいけません。私にとってはここがネックになってきそうです。

とりあえずのところはキープですかね。
ではでは〜(^^)



2016-05-14

wp-cli をさくらのVPSにインストール

以前よりここのブログとはまた別テーマの新ブログを開始しようと考えていたため、wordpressを以前から利用しているさくらのVPSへインストールしてみました。
早速ログインしてみるとプラグインを更新しろとのメッセージを発見したので実行しようとすると、FTP(or STFP)の情報が必要だとのことでした。

ただ、私のサーバーはセキュリティ上の理由からFTPは使っておらず、SFTPも公開鍵ファイルでログインする形になっています。。

途方にくれていたところターミナルから実行できる wordpress のクライアントバージョン「wp-cli」というものが存在するということだったので早速インストールしてみました。
本記事はそのインストール手順と主要なコマンドのまとめになります。



【サーバー環境】
さくらのVPS(CentOS 6.7)


【インストール手順】
インストールといっても実際はファイルをダウンロードして権限を設定し、適当な場所に設置するだけです。
実際には以下になります。


1. wp-cli をダウンロード
curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar
※curlコマンドが利用できない場合は先にインストールが必要です。


2.権限の設定
chmod +x wp-cli.phar
※環境によっては sudo が必要かもしれません。


3.パスが通っているフォルダへ移動
sudo mv wp-cli.phar /usr/local/bin/wp
※環境によって、/usr/local/bin/ の部分を変更してください。


はい!
これで wp *** というコマンドが利用可能になっているはずです。
まずは以下のコマンドを実行してインフォメーションを見てみましょう。
バージョン情報などが表示されるはずです。
wp --info


【主要なコマンド】

1.wordpress本体のアップデート
wp core update

2.(全ての)プラグインのアップデート
wp plugin update --all

3.テーマのインストール
wp theme install "wp castle"

その他のコマンドは こちら をご覧ください。
そのうち、時間ができたらもっと多くのコマンドをまとめてみたいと思います。

ではでは。

2016-05-11

PHPで休日を管理するなら yasumi【サンプルあり】

ウェブサイトの開発を進めているとたまに必要となってくるものに「祝日、休日の取り扱い」があります。
祝日・休日は結構厄介で、最近で言うと「山の日」など新たに制定されたり、突然名前が変わってしまう場合もあるため、これまでは Google Calendar APIから取得をするというのが定石だったかと思います。

ただ、GoogleのAPIは変更が大きく、また廃止されてしまうものも少なくないため最近は極力は使用しないようにしています。

そこで、何か別のアプローチ方法はないかと考えていたところ、とても便利なパッケージを発見したので試してみました。

その名は「Yasumi」です。(←開発者は日本の方っぽいです)
世界各国の言語での翻訳にも対応しているようなので、もちろん日本語の祝日・休日の名前も取得できますよ。


【インストール】
composer を使ってインストールできます。
composer require azuyalabs/yasumi

【使い方】
使い方はとても簡単で、Yasumi::create() の引数に
  1. どこの国の祝日・休日を取得するか
  2. 取得したい祝日・休日は西暦何年か
  3. (オプション)翻訳する言語はどこか
を設定するだけで1年間の全祝日・休日を取得することができます。

use Yasumi\Yasumi;

$holidays = Yasumi::create('Japan', 2016, 'ja_JP');

foreach ($holidays as $holiday) {

   echo $holiday->format('Y-m-d') .': '. $holiday->getName() .'<br>';

}

【サンプル】


ちなみにこのパッケージも将来的にサポートされなくなってしまう可能性はありますがMITライセンスでの公開ですし、この記事を書いている時点で240ものスターがついているのでおそらくGoogle のAPIを利用するよりは安定性は高いと考えています。

いざとなったらPull Request やフォークして使えますしね。

ではでは、今回は以上です。


(休みほしい...笑)



Composer でインストールができない!(短文)

composer であるパッケージをインストールしようとしたら次のようなエラーが出てしまいました。
Your configuration does not allow connections to http://packagist.jp/packages.json. See https://getcomposer.org/doc/06-config.md#secure-http for details.
うむむ、、、どうやら私の設定では接続できないよと言っているようです。
そんな設定してないのに、、、?

仕方がないので言われたとおりURLをチェックしてみることに

https://getcomposer.org/doc/06-config.md#secure-http for details

説明としては、

secure-http の項目はデフォルトで「true」。そして、この項目が true だったら https の通信しか許可しないよ、ということらしいです。

ということは、 composer がデフォルトでセキュア対応したということなんですね。
そこで、composer.json に以下のように secure-http を false にしてインストールを実行すると今まで通りうまくいきました。

"config": {
    "secure-http": false
},

ちなみにsecure-httpの項目の最後には 以前の記事 で紹介した Let's Encryp でセキュア対応した方がいいよと書いてあります。
世のウェブページのセキュア対応がどんどんすすんでいることが今回の件からもわかりますね。

というか、Packagistがまだ https に対応してないのですかね?



2016-05-08

target="_blank"は脆弱性!?【デモページあり】

ふとRedditのWebdev板を見ていたら、ウェブセキュリティについて少し興味深い記事があったのでシェアしたいと思います。

記事のタイトルは「Target=”_blank” — the most underestimated vulnerability ever」。
日本語でいうと「target="_blank" は最も過小評価されている脆弱性」というところでしょうか。

では、順を追って少しずつ見て行きましょう。



【まず target="_blank"  とは?】

target="_blank" は他のページへのリンクに利用されるもので、簡単にいうと「新しいタブとかでページで開いてね」という命令です。

例: Yahoo!

HTMLタグでいうとこうなっています。

<a href="http://yahoo.co.jp/" target="_blank">Yahoo!</a> 
 
つまり、target="_blank" 自体は特殊なものではありません。


【では問題が起こるのはどんな時か?】

JavaScriptが利用できる場合です。
ということは、、、?
そうです。
この世に存在するほとんどのブラウザがJavaScriptには対応していますのでほぼ誰にでもありうる話です。


【実際のJavaScriptコードは?】

新しく開く側にたった一行コードを加えるだけでできます。
実際のコードは以下です。(もちろん悪用は厳禁ですよ!)

window.opener.location = 'http://www.yahoo.co.jp/';

これはどういう命令かというと、「元のページを移動させろ」というものです。

つまり、

1.ページAでリンクをクリック
2.ページBが表示される
3.と同時にページAが勝手に違うページに変更されてしまう。

以下にデモページを用意したので下のリンク(画像)をクリックしてみてください。
このページが勝手にYahooに移動されると思います。
(もちろんデモページですので、実際にはセキュリティ上何の問題もありません)



【勝手にページを変更されてしまうことの何が問題なのか?】

冒頭で紹介した記事ではその手口について下のようなストーリーを用意しています。
  1. まず可愛い猫など誰でも見たくなるようなページをフェイスブックでシェアする。
  2. シェアしたリンクがクリックされたら、さっきの例のように元ページをフェイスブックそっくりのニセページへ(ユーザーが気づかないうちに)強制移動させる
  3. 移動先には「フェイスブックからログアウトしました。もう一度パスワードを入力してください」などと書かれていてユーザーにパスワードを入力させる(←もちろんこれはフェイスブックとは何の関係もないフェイクサイトです。)
というものです。


【では防ぐ手立てはあるのか?】

記事の中では、リンクに以下を含めておくといいと書かれています。

rel="noopener noreferrer"

つまり、HTMLタグでいうと、

<a href="" target="_blank" rel="noopener noreferrer">リンク</a>

となります。

では、以下のリンクをクリックしてみてください。
今回は勝手にページを移動されることはありません。




いかがでしたでしょうか。
ケースとしては少ないかもしれませんが、よりシンプルに他人のパスワードを盗み取るテクニックであることは間違いありません。

以上、今回はセキュリティについての興味深い記事をシェアしてみました。
皆さんの参考になれば幸いです。



codeceptionでseleniumを使う方法

以前「PHPの自動テストcodeception【実行サンプルDL可】」 で紹介した codeception がとても便利で最近の開発ではよく利用しています。
ただ、上記の記事でも書いたとおりJavaScriptで生成した入力ボックスなどには対応ができないため、今回は自動でブラウザ操作を行ってくれる「Selenium」をインストールして JavaScriptを含んだページのテストにも対応できるようにする方法をお届けしたいと思います。




【開発環境】

Ubuntu 14.04


【インストール】

まずはSeleniumのインストール。
以下からダウンロードできます。(Selenium Standalone Serverという場所です)
↓↓↓

Selenium - Web Browser Automation

※この記事を作成している時点では 2.53.0 が最新バージョンでした。私の開発環境Ubuntuで apt-get でインストールすると古いバージョンがインストールされてしまうので注意してください。古いものは最新のFireFoxに対応していないらしくうまくいきませんでした。

では、ファイルをダウンロードしたら適当なフォルダに保存して、

java -jar selenium-server-standalone-2.xx.xxx.jar

をコマンドから実行すれば起動します。

※もし実行できない場合は起動するためのパッケージが足りていない可能性があります。必要なパッケージは、こちら が参考になると思います。


【Codeceptionの設定】

ではCodeceptionの設定ファイルを変更しましょう。

(tests/acceptance.suite.yml)

modules:
   enabled:
      - WebDriver:
         url: 'http://localhost/'
         browser: firefox


はい。
これで完了です。
後はいつものように、

codecept run

を実行すれば自動でFireFoxが起動し、入力やデータ送信を全て行ってくれます。
(もし、エラーが出た場合は tests/_output/ にスクリーンショットやHTMLが作成されますのでどこが間違っているかを楽にチェックできますよ)

以上、短いですけど Codeception + Selenium の使い方でした。


【使ってみた感想】

Seleniumの存在を知ってはいたのですがなんだか小難しいイメージが先行してなかなか実行に移せないでいましたが、JavaScriptを含んだページのチェックもできますし、何より実際のブラウザを使っているというのはテスト結果にも安心感がもてます。

ただ、一点だけ問題があるとすればそれはやはり「実行スピード」ですね。
元々は PHPBrowser を使ってテストをしていたのでスピードは全く気にならないものでしたが、Seleniumにした途端「このテスト実行早く終わらないかなー」と待たされる時間が増えました。
ブラウザを起動するなどするので仕方ないですが、このあたりは一長一短ってとこですね。


なお、実は当初は PhantomJS を使ってテストを行っていたのですが、JavaScriptで生成する入力タグがあるとどうもセレクタの指定でうまく行かなかったため、途中で断念してSeleniumを採用することにした経緯があります。
ちなみにこちらの方はそこまでスピードが遅いという印象はなかったので、今後機会があればまたPhantomJSにも挑戦してみたいと思います。

ではでは〜!


(GWで少し不摂生しすぎたかも。。。タバコはすでにやめてますが ^-^)

2016-04-24

新ブラウザ Vivaldi を使ってみた感想

今月の頭にニュースで元opera のCEOが開発した新ブラウザ vivaldi が正式にリリースしたことを知り、少し気になっていたので私の開発環境に合わせて Linux版を試してみました。

まだほとんど少ししか使っていないので vivaldi のホントに魅力が見えてはいないとは思いますが、現時点での雑感をまとめて見ましたのでぜひ参考にしてください。




【vivaldiを試してみた理由】

よりよい開発環境を整えるため。もしウェブ制作や検索効率が上がりそうなら乗り換えてもいいかな、と考えていました。


【見た目と表示速度】

以下がこのブログのトップページを vivaldi で表示したスクリーンショットになります。
背景が黒いのは私の好みで、vivaldi をインストールして初めて起動すると背景色や背景画像をいくつか用意された中から選択することができました。
また、バーの位置も選択できるようでしたが、やはり慣れてることもあってデフォルトの画面上に表示するパターンを選択しました。

デザインとしては個人的には好きですね。
スタイリッシュな雰囲気ですし、タブなどの切り替えもとてもスムーズでした。




なお、表示速度についてですが、残念ながら正直そこまで早いとは思いませんでした。(←アップデートがあってから少し早くなったように気がします^^)
きちんとベンチマークをとれば違うのかもしれませんが、体感速度としては「ちょっとだけ読み込みが遅いな」というページもたまにありました。

拡張機能は全くインストールしていない状態でこの速度だったので少しがっかりです。

また、検索はアドレスバーと検索バーどちらともから実行できますが、アドレスバーで検索した場合は自動的に Bing での検索となりましたので、「いや、できれば Google で、、、」思いました。(←変更できるのかな?) ←設定から簡単に変更できます。お騒がせしました。

【クイックコマンド】

vivaldi の特徴として「クイックコマンド」というものがあります。
これは、コマンドウィンドウからブラウザの全てをコントロールできるものだそうです。
この発想は開発者としてはとても「それはいいね!」と思いました。

ただ、一点問題が、、、

それはクイックコマンドを呼び出すキーが「F2」だということです。
他の人はどうかわかりませんが、指が短い私の場合、ファンクションキーをブラインドタッチで一発タイプするのは正直難しいのです。

「F2を押すぞ!」 と思ってもF3を押してしまったり、指が届かず数字を押してしまったりするので、できれば phpstorm の Searching Everywhere のように Shiftボタン2回連続押しとかで起動できれば最高でした。

ただ、アイデアはとても好きですね。




【マウスジェスチャ】

以前「私がウェブ開発で行っている「時短」テクニック【全9件】」で書いたように、作業効率を上げるためにデスクトップ環境でさえマウスジェスチャを使っています。
(個人的には便利なのになぜみんな使わないのだろう、とすら感じています。)

そこへ行くと、vivaldi はデフォルトでマウスジェスチャがついているということだったので早速使ってみました。
動作、反応速度としてはとてもスムーズです。
やはりデフォルトでマウスジェスチャを搭載しているだけあって最適なプログラムになっているのでしょうか。

ただ、ここも一点だけ残念な、しかも致命的な部分がありました。それは、、、

マウスジェスチャの動作が少なすぎる

ということです。
つまり、他にもやりたい動作があるのにそれが存在せず、しかも追加ができないようでした。
なので開発効率を大事にしたい私にとってはこの部分が一番がっかりしてしまいました。




【開発環境として利用するかどうか?】

正直まだ発展途上なのかな、と感じました。
とてもコンセプトはいいですし、chrome 一極集中化しているブラウザ戦争に新しい選択肢が増えるのはいいことだと思うので今後に期待したいと思いますが、現時点で開発環境とするには足りない部分が多いかなというのが素直な気持ちです。


ただ、私が利用したのは Linux版ですので、もしかするとwindows版では違っているのかもしれません。
もし興味がありましたらぜひ試してみてはいかがでしょうか。
↓↓↓

友人たちのための新しいブラウザ – Vivaldi



ではでは。(ライトにクラシックが好きな私からすると vivaldi というネーミングも好きですよ^^)




2016-04-23

Laravel で独自コマンドを作成する方法

Laravelは本当に利用がしやすく誰にでもおすすめができるのですが、その理由のひとつ
として「自分の好きなコマンドを独自に作成することができる」というものが挙げられるかと思います。

コマンド。
そう、あまり windows ユーザーの方は馴染みがないかもしれませんが、cron が利用して定期的にプログラムを起動するといった用途に使えるととても便利な機能です。

※たしか windows 10 で Ubuntu が使えるようになる(った?)のでこれからはコマンドも windows ユーザーには馴染みのあるものに成るかもしれませんね。


ということで、今回はLaravel 5 を例に独自コマンドを作成する方法をご紹介したいと思います。




【準備】

では、まずターミナルを開いてLaravelがインストールしてあるフォルダまで移動してください。
そして、独自コマンドから起動するPHPファイルを作成します。
以下のコマンドを打ち込んで実行してください。
(TestCommandの部分はお好きな名前が使えます。)

php artisan make:console TestCommand

実行すると「Console command created successfully.」というメッセージが出て以下にひな形のファイルが自動で作成されています。
 app/Console/TestCommand.php

【コマンドファイルの作成】

ファイルを開くと「TestCommand」というクラスが書かれていて、中にいくつかのメンバ変数やメソッドなどが書かれていると思います。

ここで変更する点は以下の3点です。

  1. $signature
  2. $description
  3. handle()

ではひとつずつ見て行きましょう。

1.$signature

$signature は実際にどんなコマンドを使いたいかを設定します。
例えば、E-Mail を定期的に送信するプログラムを起動したい場合は以下のようにすればいいでしょう。

protected $signature = 'cron:email';

コロン「:」をつけておくとコマンドの一覧を確認する際に大ジャンル、少ジャンルのようにリスト表示してくれて見やすいので付けられる場合はぜひつけておきましょう。

cron
  cron:email
  cron:test
db
  db:seed

はい。
これでコマンド「php artisan cron:email」というコマンドが利用できるようになります。(実際には登録がまだなので実行はできません。もし先に登録したい場合は一番最後の項目「コマンドの登録」へ移動してください。)


2.$description

$description はそのままでコマンドの説明分です。
後で「あれ?どんなコマンドだったっけ?」なんてこともたまにはあるので、ぜひ登録しておきましょう。説明文はコマンド一覧から読むことができます。

protected $description = 'Send email to users';


3.handle()

public function handle(){  } の中にはコマンド実行した時に呼ばれるプログラムになります。
つまり心臓部分ですね。
メールを送信する、データをスクレイピングしてとってくるなどお好きな使い方をしてください。


なお、もしかするとコマンドに値を渡したい場合があるかもしれません。
例えば、

  • メールを最大10件だけ送信したい
  • 日本人ユーザーだけにメールを送信したい

そんな場合は 「argument」と「option」が利用できます。
まずは argument から。

例えばこんなカンジでコマンドを利用したい場合です。

(10件だけ送信) 
php artisan cron:email 10

$signature に

protected $signature = 'cron:test {count}';

と、{オプション名}をつけるだけでhandle()内で以下のように値を受け取れます。

$count = $this->argument('count');

ただし、この場合は必ず引数を指定しないとエラーが発生します。
もし値を任意にしたい場合は、以下のように?をつけるといいでしょう。

protected $signature = 'cron:test {count?}';

また、デフォルト値を指定したい場合はこうなります。

protected $signature = 'cron:test {count=50}';


では、次に「option」です。
option も先ほどと似ていて、基本の形はこうなります。

protected $signature = 'cron:test {--country}'


ただし、この場合は「値をとらない場合」になります。
つまり、

php artisan cron:test --country=japan

という形では利用できず、

php artisan cron:test --country

という形で、値としては true/false を受け取ることになります。
ですので、使い方としては以下のような形がいいでしょう。

if($this->option('country')) {
   echo 'Yes!';
}


では、値を渡したい場合はというと、「=」をつけて上げることで実現できます。

protected $signature = 'cron:test {--country=}';

値は、

echo $this->option('country');

として受けることができます。

同じくデフォルト値が必要な場合は

protected $signature = 'cron:test {--country=canada}';

とします。


コマンドの登録

では、最後に作成したコマンドを実際に使えるよう登録しましょう。
変更するファイルは以下になります。
app/Console/Kernel.php
このファイルの中の $commands という変数へ先ほどのコマンドを追加します。

実際にはこんなカンジです。

protected $commands = [
    \App\Console\Commands\Inspire::class,
    \App\Console\Commands\TestCommand::class,
];

※一つめの値は始めから記述されているものになります。

はい。
これでコマンドラインから実行ができるようになりました。
まず、一覧に表示されているかを確認してみましょう。

php artisan

おそらく

 cron
  cron:test             Send email

という形で表示がされていると思います。

では!
実際にあなたの独自コマンドを実行してみましょう。

php artisan cron:test

handle() に書かれたプログラムが実行できるのを確認できるはずです。


なお、コマンドに文字を表示するには echo() でも問題ありませんが、以下を利用すると見やすいので一度試してみてもいいかもしれません。

  • $this->line('テキスト');
  • $this->info('テキスト');
  • $this->error('テキスト');
上から、通常のテキスト、色付きテキスト、背景が赤のテキストとなります。


と今回はLaravelの独自コマンド作成をお届けしました。
皆さんのお役にたてれば幸いです(^^)