LaravelでAPIの結果をCloudFrontでキャッシュさせようとしてハマった話【#np2020】

先日用意したAmazon API(Amazon Product Advertising API)を利用したAPIを、リクエスト数節約のためにCloudFrontでキャッシュさせようとしたんだけど、どう設定してもキャッシュしてくれなくてハマってました。見直す中でCloudFrontの設定に間違いもあってそれで混乱してしまったのですが、どうやら設定のせいじゃない。APIの取得結果をJSONで返すだけだからCookieも使っていないし、なぜキャッシュされないのか…… と思いながら冷静になってChromeのデベロッパーツールでリクエスト見てたらこんなんなってました。

続きを読む

【メモ】Laravelで簡単なAPIを実装してみる【#np2020】

Laravelへの機能実装を進めながら泥縄でいろいろ勉強するということをしています。で、ある機能を実装するのにフロントエンドはVueで実装して、データはサーバ側で取得してJSONで渡そうかというようなことを考え、APIを実装してみました。とりあえずサンプルなので使うデータは何でも良かったんですが、あとで使えるようにってことでAmazonの商品情報API(Amazon Product Advertising API)を使うことに。ASINを渡すと商品情報のJSONを返してくれるだけのシンプルなAPIです。

続きを読む

【メモ】vue-chartjs を入れて「[Vue warn]: Invalid prop: type check failed for prop “chartData”」が出る場合の対処方法【#np2020】

グラフを描くJavaScriptライブラリとして最近人気なのが「Chart.js」というやつらしいです。このサイトでもいくつかグラフを作っていますが、いまだにFlashを利用していていい加減切り替えたいと思ってテスト中です。

続きを読む

WordPressで作成したサイトにパスワード認証を掛ける

自分だけが閲覧出来るブログを自分のサーバに置きたい、ということがあります。昔書いてたけど古くなりすぎたとか、検索に引っかかって欲しくないとかそういうの。普通のブログであれば公開ディレクトリに.htaccess置いて終わりなんですが、マルチドメインでWordPress使ってるとドメインに対応したディレクトリって存在しないんですよね。ドメインに対してBASIC認証というのも、WordPressの管理画面に入る時にも要求されてなんかあんまりスマートじゃない。

続きを読む

Instagramの貼り付けコードはもうちょっとなんとかならないんだろうか

instagram_new.png InstagramのPC版には貼り付けコードを書き出してくれる仕組みがあって、それをブログなどに貼り付けるとこうなります。

View this post on Instagram

犬おじさん #ネイマール の歯磨き中。

鈴井貴之さん(@suzuitakayuki)がシェアした投稿 – 2018年 6月月29日午前9時55分PDT

とても便利なんですけど、でもこの貼り付けコードすごい長いんですよ。 適度に改行を入れて整形するとこうなります。

続きを読む

サイト移行プロジェクトの現状【#np2020】

昨年11月に始めた現行サイトのサーバーアップデートとそれに伴うサイト移行プロジェクトですが、4ヶ月経った現在でもまだ移行出来る目途が立ってません。長い間に積もったものを一気に変えようとしているせいもあるし、課金をなるべく減らすべくローカルで作業しながら準備をしているせいで、作業は進んでも目に見える結果は何一つ出ていないというせいもあります。そもそも無い時間を縫って作業しているし。

続きを読む

JavaScript エラー「Uncaught SyntaxError: Unexpected end of input」への対応

記録されたエラーは下記の通り。

"message": "Uncaught SyntaxError: Unexpected end of input",
"file": "",
"lineNo": 1,
"colNo": 158,
"stack": "SyntaxError: Unexpected end of input",
"user_agent": "Mozilla/5.0 (Linux; Android 7.1.1; OPPO A79; Build/N6F26Q; wv) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.92 Mobile Safari/537.36 SogouMSE,SogouMobileBrowser/5.6.0"
このエラーは一般的にはコーディングのミスで発生するものです。例えば閉じ括弧を付け忘れたとか。 Uncaught SyntaxError: Unexpected end of inputというエラー でもこのエラーは長く安定して動いている(はずの)スクリプトで生じていて、十分にチェックしてもそのての文法ミスは見つかりません。しかも毎回記録されるわけではなく、何か特定の条件が重なったときにだけ記録されるようです。もし閉じ括弧の付け忘れなら、毎回エラーが記録されるはず。 致命的な問題にはなっていなさそうだけれど、気持ち悪いので調査を続けたところこんな情報が。

analog_MultiMeter: JSON.parseでハマった

原因 ChromeのJSON.parseは、空文字が入るとおかしなことになるらしい。 JSでは空文字列はfalse性を持つので、上記の対策で通るという事。 そのエラー発生は良いとしても、JSON.parse()のエラーでなくてEnd of Inputなんてわかりづらいエラー、それもHTMLの1行目なんかに出るのが悲しい。

なるほど。 ChromeのJSON.parse()に空文字を入れるとエラーになると。エラーログからでは具体的にどのJavaScriptファイルでエラーが出ているのかわからないし、そもそも1行目のエラーとなっていて問題の特定が難しかったけれど、幸いサイト内で「JSON.parse()」を使っている部分は限られていたので、そこを改修。 もともと発生頻度の低いエラーなのでこれで効果があるかどうかは不明だが、しばらく様子を見たいと思います。 ちなみに僕が見た環境での「JSON.parse()」は、こんな感じで使われていました。
function (error) {
var obj_error = JSON.parse(error);
}
どこかで生じたエラーをキャッチしてエラー処理を行う的な感じの部分。errorはエラーメッセージを格納するようでPHPとの連携がある部分なんですが、コードを追っていくとどうやら、一部の古いコードで例外は投げるがエラーメッセージは投げない、という処理がなされている模様。それがJavaScript側に渡され、空のerrorが作られ、それを JSON.parse() しようとしてエラーが出る……みたいな流れ。 そう考えると悪いのはPHPのコードの方なんじゃないのという気もしないでもないけど、だとしても空文字に対する処理は必要だし。とりあえず解決したっぽくて良かった。

続きを読む