サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Pixel 9
nextat.co.jp
こんにちは、ナカエです。 某所のLTでApp Runnerの紹介をしてきたのでブログ記事でも紹介します。 AWS App Runner概要 AWS App Runner は2021年5月にリリースされた、コンテナ化されたウェブアプリケーションのフルマネージドサービスです。GitHubのリポジトリからのソースコードベースのデプロイとECRからのコンテナベースのデプロイに対応しています。 バックエンドはECSでも利用可能なFargate(Firecracker VM)となっています。 参考: https://dev.classmethod.jp/articles/report-con406-reinvent2022/ ECSとの違い ECS/Fargateと比較すると、AWS App Runnerのほうがユーザー側が責任を追う範囲がより小さくなります。AWSにお任せして楽ができるトレードオフと
こんにちは、ナカエです。 先週末は少し暖かかったかと思えばまた寒くなりましたね。 本日の記事はWasmer Edgeというエッジにアプリケーションをデプロイできるサービスと新しいプログラミング言語である Onyx を合わせて試したという内容です。 まずはそれぞれの簡単な紹介から入ります。 Wasmer Edgeとは Wasmer Edge はエッジロケーションにWebAssemblyのランタイムを展開し、Wasmバイナリをアプリケーションとして安価にスケーラブルに動かせると謳うサービスです。米Wasmer社が提供しています。 個人的にはブラウザ側だけでなくサーバー側であるエッジでまでJavaScript/TypeScriptという選択肢だけになるのはちょっと……という気持ちがあり、エッジでのWasmの実行についても興味を寄せています。 ユーザーに近いロケーションでコンテナを動かす、というこ
皆様、E2Eテストを導入していますか? 今Microsoft製E2Eツール「Playwright」がアツいので、検証してみました。 公式サイト:https://playwright.dev/ 環境とソフトウェアのバージョン OS: macOS Monterey 12.4 Next.js: 12.1.6 Node: 16.13.1 React: 18.1.0 Playwright: 1.24.1 TypeScript: 4.6.2 Playwrightのインストール 自動インストール(initコマンドを使用)、手動インストールの2通りの方法があります。 自動インストール(initコマンドの使用) # npm npm init playwright@latest # yarn yarn create playwright 構成ファイルが作成されます。テストディレクトリを指定し、GitHub A
top > 開発ブログ > AWS > AWS App RunnerのPHPマネージドランタイムをApache + PHP-FPMの構成で動作させる こんにちは、ナカエです。本日はAWS App Runnerについての記事です。 App Runnerのデプロイ方法とマネージドランタイムのサポート追加 AWS App Runnerでは 自前でコンテナを用意するコンテナベースのサービス GitHubリポジトリにコードを用意するコードベースのサービス(マネージドランタイムを利用) の2パターンを選択できます。 先日、マネージドランタイムに複数の言語が追加され話題になりました。 参考:AWS App Runner がサポートするマネージドランタイムに PHP、Go、.Net、Ruby を追加 PHPのマネージドランタイムの問題点 新しくサポートされた言語には我らがPHPも含まれていましたが、AWS
top > 開発ブログ > PHP > Laravel > 【静的解析】Larastan(PHPStan)の未使用プライベートクラス定数の誤検知エラーを回避してみよう こんにちは、モリです。 今回は静的解析ツールであるLarastan(PHPStan)の未使用プライベートクラス定数についての誤検知への対処方法について紹介したいと思います。 環境 PHP: 8.1 Laravel Framework: 9.19.0 nunomaduro/larastan: 2.2.9 解析レベル8 myclabs/php-enum: 1.83 問題となるコードとエラー まず実際に出力されるエラーと対象のコードについて見ていきたいと思います。 use MyCLabs\Enum\Enum; class Gender extends Enum { /** 男性 */ private const MALE = 1;
こんにちは。タカギです。 先日は弊社のアイドルけいちゃんがNext.js12のMiddlewareについての記事を書いてくれました。 その記事からもわかるように、弊社でもフロントエンドにReactやNext.jsを採用することが増えてきています。 Next.jsを採用した場合、同じくVercelで開発されている SWR というReact Hooksライブラリを併せて使用することが多いのではないかと思います。 SWRの公式ドキュメントのトップページには以下の文章があります。 “SWR” という名前は、 HTTP RFC 5861 で提唱された HTTP キャッシュ無効化戦略である stale-while-revalidate に由来しています。 SWR は、まずキャッシュからデータを返し(stale)、次にフェッチリクエストを送り(revalidate)、最後に最新のデータを持ってくるという
こんにちは、ナカエです。 当ブログでも何度か紹介している Cloud Native Buildpacks はDockerfileを書くことなくコンテナイメージをビルドできる仕組みの一つです。 参考:Dockerfile不要!Cloud Native BuildpacksでLaravelアプリケーションのコンテナイメージを作成する Google Cloud Buildpacks Google Cloud Platformには Google Cloud Buildpacksとして Buildpacks への公式サポートが存在します。 参考: Google Cloud now supports buildpacks | Google Cloud Blog 以前のBuildpacksとCloud Runの組み合わせを紹介した記事では、Google Cloud BuildpacksがPHPのアプリケ
こんにちは、ナカエです。 Herokuの一件で最近のPaaSの動向が気になり、 Render を始め海外で人気があるPaaSを調査していました。その中の一つが Fly.io です。 接続したユーザに最適なデータセンターでアプリケーションを起動することによる低レイテンシ、およびflyctlというCLIのコマンドで完結できるというところがウリのようです。 In the process we want to make application distribution platforms as ubiquitous as CDNs. アプリケーション配布プラットフォームをCDNと同じくらいユビキタスにしたい、とのこと。 今回はそんなFly.ioに例によってLaravelアプリケーションをデプロイしていきます。 検証環境とソフトウェアのバージョン OS: macOS Monterey 12.2.1
と、とんでもなく早くなってますね・・・。 Clientで約2.67倍、Serverで約2.61倍の速さになっています。 結構大規模で重たいアプリケーションということもありますが、確実に体感できるくらい早くなってます。 実は私、最近M1 Macを支給されたばかりで、元々使用していたIntel MacではM1 Mac x gRPC-FUSEの結果ですら比べ物にならないくらい時間がかかっていたので、そのgRPC-FUSEより更に早いとなると、もうただただ恐ろしいです。 これでもうコンパイル中にTwitter見たりタバコ吸ったり他の業務に手を付けてコンパイル完了後にまた戻ってくるというスイッチングコストをかけたりしなくて済むんだ・・・と思うと嬉しいような寂しいような。 そしてgRPC-FUSEちゃんは短い付き合いだったけど、完全にいらない子になってしまいましたね・・・さようなら。 でも、まさか、こ
top > 開発ブログ > PHP > Laravel > Dockerfile不要!Cloud Native BuildpacksでLaravelアプリケーションのコンテナイメージを作成する こんにちは、ナカエです。 本日はCloud Native Buildpacksについての記事です。 Buildpacksは簡単に言えばDockerfileを書かずにアプリケーションのコードからコンテナイメージを作成できる仕組みです。元はPaaSで有名なHerokuで考案され、Cloud Foundryや他のPaaSでも利用されてきました。 Herokuにコードをデプロイするだけでアプリケーションが動くのは、裏でこのBuildpacksが活躍していたおかげなんですね。 HerokuとCloud Foundryで差異があった仕様を統一し、アプリケーションコードからOCIイメージを作成する仕様として標準化
top > 開発ブログ > AWS > AWS AppSyncのGraphQL Subscriptionsのクライアントを作って裏側の仕組みを学ぶ こんにちは、ナカエです。 マネージドなGraphQLサーバを手軽に作れるAWS AppSyncがじわじわと人気を集めてきているようですね。 AppSync APIのクライアントとしては公式のSDKたるAmplifyを利用すると楽ちんです。 が、しかし今回はAppSyncのGraphQL Subscriptions実装の仕組みを確認するため、Node.jsとWebSocketクライアントを使ってリアルタイム通信のクライアントを実装しました。 GraphQLのスキーマとAppSync API の認証モード 本記事のサンプルはトピックごとにメッセージを投稿/受信する簡易なチャットルームアプリを想定しています。 Mutationはメッセージの投稿に、S
PHPフレームワークSlim4の紹介 こんにちは。タカギです。 弊社ではサーバーサイドのFWにLaravelを使用することが多いですが、以下のようなことを思ったりすることもあります。 外部APIのコールにGuzzle Httpを使っていると、全体をPSR-7に統一したくなる(LaravelはPSR-7非準拠(LaravelがというよりSymfonyが)) FWに提供されている機能をあまり使っていないのでもう少し軽量でいい 軽量と言ってもルーティングとDIコンテナはさすがに必須 単純に別のFWでも遊んでみたい 今回そんな欲求を満たしてくれそうなSlim4との出会いがあったのでご紹介します。 ※ 前バージョンのSlim3については弊ブログでも紹介しております Slim4の概要 公式ドキュメントはhttp://www.slimframework.com/から ドキュメントにある通りですが、 機能
top > 開発ブログ > PHP > Laravel > LaravelアプリケーションのAPIがSwagger/OpenAPIドキュメントに準拠していることを透過的にテストする こんにちは、でぃーほりです。 Laravelアプリケーション開発において、 「API実装がSwagger/OpenAPIドキュメントに準拠していることを透過的にテストする」 仕組みを構築する機会があったので、背景・モチベーションから順を追ってご紹介します。 対象読者 バックエンドAPI開発に携わっている API仕様の文書化にSwagger/OASを使用している API仕様と実装が乖離して困っている 背景 Swagger/OASとはAPI仕様の文書化標準です。 HTTPリクエスト/レスポンスの形式を、人間とコンピュータの両者が理解できる形で文書化できます。 OAS(OpenAPI Specification)はS
こんにちは、ナカエです。 本日はローカルの開発環境整備に関わる記事です。 /etc/hostsの設定が手間 複数のプロジェクトを進めている場合、ローカル開発環境では myapp.test や myapp.localなどの個別の開発用ドメインを割り当てて開発していることが多いと思います。 基本的にこの名前解決を/etc/hostsファイルで設定していたのですが、 Macの管理権限がない場合に自力で設定できないのが気になるようになってきました。 プロジェクトごとの開発用ドメインの名前解決の設定をなくし、環境構築を管理者の手を借りずに行いたいと思い、名前解決の設定方法を模索することにしました。 残念ながら、/etc/hostsではドメイン名にワイルドカードは使えないため、他の手段を用いることにします。 Dnsmasqを利用する Dnsmasqは軽量なDNSのフォワーダとDHCPサーバの機能を提供
top > 開発ブログ > PHP > Laravel > LaravelのControllerのライフサイクルとサービスコンテナへの束縛登録のベタープラクティス こんにちは、ナカエです。 本日はLaravel Advent Calendar 2019 - Qiitaの13日目の記事です。 昨日はういろうさんのLaravel6.x系以降のバージョニングについての解説記事でした。 【Laravel】6.xからバージョンが進むのが早い理由と、バージョンアップのやり方【790日目】 はじめに 本記事では"Serviceクラス"という言葉を FWユーザが作成した独自クラス サービスコンテナによってControllerに注入されるクラス という程度の広い意味で用いています。"Serviceクラス”の中にHTTP層の処理が混ざっていても気にしないでください。 TL;DR ServiceクラスをCont
こんにちは。 ニシザワです。 PHPのpackagistでComposerを使っている方が多いと思います。 ただ、必要なライブラリをComposerでインストールしても、たまにClassが見つからないなんて出てきて、困ってしまうことがあります。 今回は、Composer installでライブラリを上手く読み込めない場合の対処法を書きます。 classを再読込してみる composer dump-autoload classはautoload.phpで管理されているので、こちらの更新が必要かもしれません。 キャッシュを消して再インストールしてみる rm -Rf vendor/ rm composer.lock composer clear-cache composer install composerは同じバージョンのライブラリはcacheされてしまうので、何度読み込み直してもcacheが
こんにちは、ナカエです。 少し前になりますが、4月のlaravel.osakaにてADR(Action-Domain-Responder)パターンについてのLTをさせていただきました。 ADRパターンというと1Action=1クラスという特徴に注目する方が多いですが、一番の見所はResponderですよ! Webアプリケーションの"ビュー"についを考え直しましょうという趣旨のものです。 スライド: "ビュー"を考えるためのADRパターン GitHub: n1215/lara-adr ADRパターン on Laravelで同じDomainの処理をコンソールコマンド、Web API、Webページの3通りに使い回すサンプルコードです スライドはほぼ理念の説明とメリットに終始したので、ADRパターン実践時の感想とトレードオフについて補足しておきます。 ADRパターンのデメリット 実際にADRパター
こんにちは、ナカエです。 2019/02/16(土)に東京の田町グランパークで開催された Larvel JP Conferenceに参加してきました。 東京がこわいので引きこもり気味なので、大きいカンファレンスでの登壇は初めてでした。 スライド 「PHPでもgRPCサーバを立てたいだけの人生だった」というタイトルで gRPCとProtobolBuffers PHPでgRPCサーバは可能なのかどうか 脱PHP-FPMの流れ PHPの変化について行くために今からできること などについて、gRPC沼、Swoole沼、RoadRunner沼に一人でも多くの人を引き込むことを目標にまとめました。 LTの裏の枠 セッションは3FのLaravelトラックと4FのPHPトラックに分かれています。自分はLaravelにあまり関係ないプロポーザルをその場のノリで提出していたのでPHPトラックでした。 タイムテ
こんにちは。 ニシザワです。 今回はVueJsの記事を書きます。 Vue.jsには算出プロパティと言われる、便利なキャッシュされるmethodのようなものがあります。 methodなのに簡単には引数を取れなくなっているので、今回はそちらをご説明します。 特に、v-forのループ処理に便利ですのでよければ参考にしてください。 では実際のコードを見ていきましょう。 <li v-for="(item,key) in items"> <td><a :href="'/hoge/' + key" :disabled="canLink(key)">リンク</a></td> </li> 上記のように値が入ってきたときだけ、リンクが押せるようにするというコードがあったとすると computed : { canLink: function () { self = this; return function (
こんにちは。 ニシザワです。 Laravelでリレーションさせているデータ ・1対1 ・1対多 ・多対多 があると思います。 これを関連テーブルと一緒に保存する方法を今回は紹介します。 1対1の例 モデルは下記 ※関連モデルにfillableを設定するのを忘れずに。 class User extends Model { protected $fillable = [ 'name', 'email' ] /** * ユーザーに関連する電話レコードを取得 */ public function phone() : HasOne { return $this->hasOne(Phone::class); } } リクエストの中はこのような形になっているとしましょう。 [ 'user' => [ 'name' => 'hoge', 'email' => 'hoge@hoge.com' ], 'pho
こんにちは、ナカエです。 本日はGo言語で書かれたPHPアプリケーションサーバ、RoadRunnerについての記事です。 PHPアプリケーションサーバの新潮流 昨今のPHP界隈では、Swooleに代表されるように、よくあるApache+mod_phpやPHP-FPMによる従来の構成と異なる実行方法を持つPHPのためのHTTPサーバまたはアプリケーションサーバが少しずつ注目を集めるようになってきました。 従来のPHPの実行方式における「1つのリクエストごとにアプリケーションの初期化が行われレスポンスを返すと状態がリセットされる」という前提を覆し、アプリケーションの初期化の前倒しによる大幅なパフォーマンスの向上を図れると話題を呼んでいます。 RoadRunnerもそんな新興のアプリケーションサーバの1つで、Go言語で書かれています。 HTTPのリクエストを前段のGoのHTTPハンドラがさばき、
こんにちは。 ニシザワです。 Laravelのカスタムバリデーションはどうしていますか? Validation Classを拡張する方法もありますが、Laravelが推奨しているルールオブジェクトを使うとシンプルに書けます。 今回はルールオブジェクトを説明します。 まずは、コンソールで下記を打ちます。 php artisan make:rule PercentSum これで、app/Rules/PercentSum.phpというファイルができたと思います。 では今回は、複数カラムからなる入力値の合計が100までというカスタムバリデーションを書いてみます。 <?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; class PercentSum implements Rule { /** * @var arra
top > 開発ブログ > PHP > Laravel > [Laravel] JSONレスポンスのUnicodeエスケープ無効化はミドルウェアで! こんにちは、ナカエです。Unityの記事を書こうと思っていたのですがネタを見つけてしまったので今回もLaravelについての記事です。 PHPユーザーズ(日本語)の#laravelチャンネルのログで JSONレスポンスをブラウザで確認するときにUnicodeエスケープされているので解除したい いちいち個別にJSON_UNESCAPED_UNICODEオプションを指定してまわるのは避けたい LaravelのJsonResponse生成が直でnewされていたりするのでフレームワークの該当箇所を全て差し替えるのも辛い という会話を見つけました。ブラウザ以外のツールを使ってレスポンスを確認するという解決策のほか、フレームワークの各所の依存を差し替える
みなさんこんにちは ニシザワです。 本日はLaravelネタです。 下記のようなエラーでたことないでしょうか? {"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'Class名' not found","file":"\/Applications\/MAMP\/htdocs\/XXXXX\/vendor\/laravel\/framework\/src\/Illuminate\/Database\/Migrations\/Migrator.php","line":297}} そう、クラスがないよーってやつです。 でも、ソースにはクラスあるんだけど・・・ みたいな笑 これは、クラス名を急に変えたときなどにおこります。 特に、tableをartisanで作っ
こんにちは、ナカエです。 HTMLを利用するWebサイトのパフォーマンスチューニングをする際にはDebugbarにお世話になっていますが、API開発をする場合はClockworkが手軽で便利です。 デバッグのための情報がHTMLに挿入されるのではなく、Chromeのデベロッパーツールで確認できるようになります。 1. Chrome拡張の導入 Chromeウェブストアからインストールします。 Clockwork - Chrome ウェブストア 2. サーバ側のパッケージの導入とLaravel側の設定 [itsgoingd/clockwork](https://github.com/itsgoingd/clockwork) を利用します。 composerでインストール composer require itsgoingd/clockwork サービスプロバイダの設定 config/app.p
top > 開発ブログ > PHP > Laravel > 【Laravel】Controllerのコンストラクタのタイミングでルートパラメータを取得する方法 こんにちは、スズキです。 今回はLaravelでControllerのコンストラクタのタイミングでルートパラメータを取得する方法を紹介します。 例えば、routes.phpのルート設定、及び、Controllerの設定が以下のようになっていたとします。 ●routes.php Route::group(['prefix' => '{prefecture_slug}'], function(){ Route::get('/', ['uses' => 'Test\PrefectureController@index', 'as' => 'test.prefecture.index' ]); }); ●PrefectureControll
こんにちは、ナカエです。 Laravel標準のORMであるEloquentはマジックメソッドによるメソッドの委譲が利用されており、 Article::where('title', 'LIKE', "%タイトル%") ->where('category_id', '=', 1) ->orderBy('created_at', 'desc') ->get(); という優雅なコードの裏ではModelクラス以外にも2つのBuilderクラスが働いています。 この委譲関係を把握することはEloquentの理解にとって非常に有意義です。 ※下記はLaravel 5.1 LTSのコードを参照しています。 \Illuminate\Database\Eloquent\Builderクラス フルネームが長いので以下Eloquentビルダーと呼称します。 where, findなどModelクラスにstatic
こんにちは、ナカエです。 先日、Laravel5.1での開発中に、 DBから読みだした値をCookieにセットしJavaScriptから利用する必要がありました。 本日の記事は、Cookieのキーによって暗号化の有無を変える方法についてです。 LaravelにはCookieの値を暗号化するHTTPミドルウェアとして、 \Illuminate\Cookie\Middleware\EncryptCookiesクラスが標準で用意されています。 このミドルウェアを有効にしていると、 HTTPリクエスト→EncryptCookiesでCookieの値を復号→アプリケーションでの処理→EncryptCookiesで暗号化→HTTPレスポンス という流れで、アプリケーション内でCookieを設定した場合、 クライアント側には値が暗号化されたCookieが渡ることになります。 このままではJavaScri
こんにちは、スズキです。 今回はLaravelのモデルクラスにgetアクセサを設定する方法を紹介します。 流れとしては、以下の順で紹介します。 getアクセサの実装方法 注意事項:getAttributeメソッドを上書きする方法はNG モデルクラスにgetアクセサを設定する方法ですが、 「getXxxxAttribute」という形式のメソッドを追加すれば、これがgetアクセサとして機能するようになっています。 例えば、以下のようなFaxNumberモデルがあったとします。 ●FaxNumberモデル class FaxNumber extends Model { public function getTotalNumberAttribute() { $arrCode = []; foreach ([$this->area_code, $this->local_number, $this->
次のページ
このページを最初にブックマークしてみませんか?
『株式会社Nextat(ネクスタット)』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く