タグ

ブックマーク / qiita.com/tadsan (26)

  • ComposerのPharパッケージという選択肢 - Qiita

    みなさんはPHPで書かれたツール類などを、どうやってインストールしているでしょうか。 まあComposerを使うのが基ではあるのですが、 Phiveみたいなツールもあったり、Composerを使うとしても composer global require を使うとか、composer require --devを使うとか、Composer bin pluginを使うとかの方法がありますよね。 PHPStan開発者のOndřejはこのように言っています。 PHPStanのインストール方法の選択肢については別に記事を書いています。 PHPStanについては上の記事にも書きましたが、composer require --dev phpstan/phpstanでインストールするだけで外部に依存性を持たない状態でパッケージをインストールできます。 Pharファイルを見る そもそもPHPStanのCo

    ComposerのPharパッケージという選択肢 - Qiita
  • PHPからJavaScriptにデータを受け渡すときに考えること - Qiita

    PHPのstringは任意のバイト列を扱えますが、JavaScript/JSONはUnicodeで扱える文字しか扱えません PHPのint / floatはプラットフォーム依存ですが、JavaScriptのnumberは整数と小数を型レベルで区別しません JSONのarrayに対応する型はPHPのarrayのうちリストであるものです PHPは配列(リスト)と連想配列を型レベルで区別せず、どちらもarrayです リストはキーが0からの抜けがない連番になっている要素が0個以上の配列です array_is_list()関数で連想配列とリストを判別できます array_values()で連想配列をリストに変換できます array_filter()の結果はフィルタされたキーがスキップされるのでリストではありませんが、結果をarray_values()に通すことでリストにできます JsonSerial

    PHPからJavaScriptにデータを受け渡すときに考えること - Qiita
  • 最速LSPクライアント lsp-bridgeを使おう - Qiita

    最速LSPクライアント lsp-bridgeを使おう こんにちは! メリークリスマス! LSP使ってますか? 現在Emacsで代表的なLSPクライアントとして使われているのはLSP Mode、Emacs 29から標準のLSPクライアントとしてマージされたEglotがあります。 そんな中、今回紹介するlsp-bridgeは「最速」を謳うEmacsの第三のLSPクライアントです。 このパッケージはMELPAなどには登録されておらず、まだ開発段階の趣きがありますが、非常に快適な実装なのでこの期に紹介します。 特徴 The goal of lsp-bridge is to become the fastest LSP client in Emacs, not a complete implementation of LSP protocol. lsp-bridgeはLSPの全機能を網羅するよりも最

    最速LSPクライアント lsp-bridgeを使おう - Qiita
  • 変数をリストにまとめる - Qiita

    (defun sut (arg) "テスト対象" (let ((a 1) (b 10) (c 100)) (message "sut: %s" (list a b c arg))) t)

    変数をリストにまとめる - Qiita
  • PHPの文と式 - Qiita

    このスライドは突発で開催されたPHPerKaigi Online(仮)でしゃべるために用意されたものです。 前回のあらすじ コードを自在に操るためのPHP文法入門 PHPのソースコードを正確に検査したり、ソースコードの一部を書き換えたいと思ったことはありませんか? PHPにはPHP-Parserという構文解析ライブラリがあり、静的解析ツールのPHPStanやリファクタリングツールのRectorはPHP-Parserをベースにしたプラグインでソースコードを検査したり、ソースコードを書き換えたりすることができます。 しかしながら、構文木を操作するには普段何気なくPHPコードを書く以上のプログラミング言語についての知識が求められます。この発表では構文木を取り扱う前提となるプログラミング言語についての知識、PHP-Parserの構造、PHPStanとRectorそれぞれの拡張方法と実例についても紹

    PHPの文と式 - Qiita
  • ジェネレータで大量データをCSVにファイル分割して書き込む - Qiita

    みんな大好きジェネレータ。クラスとか定義せずにジェネレータだけで綺麗に書けるぞ。 背景 もともとは仕事で書いたコード。先日開催されたPHPerKaigi 2020でジェネレータの事例紹介として出したので、ここで見せます。 要件 データベースから値を取り出してCSVにダンプしたい レコード数 = とにかくいっぱい 全レコードを1クエリで全部取得するのはメモリ量としてもDBの負荷としても許容できない CSVは表計算ソフトで読み込ませる必要がある 表計算ソフトという括りではExcelに限らず65535行以上のCSVを扱えるのは稀なので、ファイルには65534レコードごとにファイルを分割する。 実装 おいらは3重ループとか4重ループとか多重ネストさせるのは絶対に嫌なのでジェネレータで処理を分割しました。 #!/usr/bin/env php <?php /** * 実行すると記事一覧を CSV

    ジェネレータで大量データをCSVにファイル分割して書き込む - Qiita
  • このPHPがテンプレートエンジンのくせに慎重すぎる (中篇) - Qiita

    この記事について みなさんここまでついてこられていらっしゃいますでしょうか。この記事はこのPHPがテンプレートエンジンのくせに慎重すぎる (前篇)の続きなので、先に読んで、できれば実際に準備してから来てください。 一気に後篇を書いてしまおうとも思ったのですが、前回は徹夜して書いたので日は著しく眠いので「Psalmの続き」と「型宣言」と「Phan」の話を書いて私は寝ます。 Psalm/Psalter (前回の続き) さて、PsalterはPsalm同梱の修正ツールです。./vendor/bin/psalter --issues=allで実行するとプロジェクト内のファイルが書き換えられます。 Psalterに限らず、今後ソースコードを自動で書き換えるツールがありますので、実行前にGitでコミットしておいてください。 diff --git a/src/Hello.php b/src/Hello

    このPHPがテンプレートエンジンのくせに慎重すぎる (中篇) - Qiita
  • このPHPがテンプレートエンジンのくせに慎重すぎる (前篇) - Qiita

    この記事ではPackagistで公開可能な形式のPHPのライブラリ(Composerパッケージ)を公開するための道具立てを紹介します。あと、現代のPHPerはツールを組み合せてさくっと開発しているんだという自慢です。 タイトルは「この TypeScript が Hello, world! のくせに慎重すぎる」と「この勇者が俺TUEEEくせに慎重すぎる」のぱくr… パロディです。 テンプレートエンジンのくせに型安全なんてなまいきな。 この記事の読みかた せっかくなので手を動かしながら自分でComposerパッケージを作成してみましょう。 今回の題材は「Hello worldを出力する」という革新的機能を提供する、とても画期的な実用ライブラリです。 記事名通り「慎重すぎる」ので、細かく刻んでGitで経過を保存しながら作業を進めていましょう。なんかよくわからない状態になったらgit reset

    このPHPがテンプレートエンジンのくせに慎重すぎる (前篇) - Qiita
  • P++: 銀河に平和をもたらすための奇策と決着 - Qiita

    PHP 8から、PHPは「PHP」と「P++」という2つの言語を提供するようになる というキャッチーな紹介をするP++: 静的型付けをめざすPHPという記事がそれなりに話題になり、このニュースは目覚しく革新的な内容で、多くのひとの目を引き付けました。 これは早まった理解であり、ほとんど誤報と言ってもいい内容でした。2019年8月15日には提案者人も、少くとも「P++」の計画を短期的に実現するととは非現実的であり時期尚早であることを認めています。 この記事では、PHP開発の現状、なぜ野心的なP++計画が提案され、事実上撤回されたかの経緯について紹介します。 [中立性のための表示] この記事の著者@tadsanはPHPの静的解析を強く推進する立場です。 PHPゆるふわCI入門 PHP型検査・夢と理想と現実) 三行で要約 PHPはバージョンを経るごとに「歴史的経緯」による負債が削ぎ落されてきた

    P++: 銀河に平和をもたらすための奇策と決着 - Qiita
  • PHPの無名関数式とは何か、そしてPHP7.4のアロー関数にそなえよう - Qiita

    PHP 7.4は現在beta1までリリースされたので、今頃はみなさまも12月のPHP 7.4.0正式リリースに向けて遊び倒してるところだと存じます。7.4でPHPに新たに導入される文法はいくつかありますが、その目玉のひとつがArrow Functions 2.0です。 ちなみにこの記事は「アロー関数はすべての無名関数式の代替になるわけではない」として書きはじめたので、今回当に書きたかったのはそのあたりです。 最初にまとめると、「アロー関数は簡単なことを短く書ける」記法です。 複雑なことをするには既存のfunction式の方が適してます。 前提知識: 式と文 PHPをはじめとするC言語に影響を受けた多くのプログラミング言語では「式 (expression)」と「文 (statement)」を厳密に区別する特徴があります。 雑に言うと、文とは以下のようなものです。 制御構造 if, else

    PHPの無名関数式とは何か、そしてPHP7.4のアロー関数にそなえよう - Qiita
  • 正規表現でPHPを脆弱にする (1) 「^ と $」 - Qiita

    みなさん正規表現は好きですか? 私は好きです。簡単に脆弱性を作り込めて、とても便利ですからね。 この記事ではPCRE関数(preg_match(), preg_replace()など)を利用して、みなさまにPHP正規表現のバッドノウハウを教示いたします。 先に結論を書きます 単独の文字列のマッチに $ を用いるのは予期しないパターンになるのでやめましょう。^は特に危険ではありませんが、^と$の組み合せではなく\Aと\zの組み合せを覚えましょう。ただし、m修飾子で複数行(マルチラインモード)で、行頭と行末にマッチさせたい場合を除きます。 文字列のマッチに ^ と $ のペアを利用する そうですね、例としてQiitaのようなユーザー登録サイトの表示名 @tadsan のような文字列を登録する前の検査をするとします。 要件としては、使用可能な文字は abcdefghijklmnopqrstuvw

    正規表現でPHPを脆弱にする (1) 「^ と $」 - Qiita
  • PHPで文字列リテラルに式展開 - Qiita

    Rubyでは文字列リテラルに任意の式を書いて展開できますが、PHPには単なる変数展開の機能しか存在しないので、同じことを実現するためには利用できないような気がしますが、別にそんなことはなかったぜ。 Rubyでは #{}で囲むことで任意の式1が書けます。

    PHPで文字列リテラルに式展開 - Qiita
  • make-variable-buffer-localとmake-local-variableの関係 - Qiita

    なんか同じような名前の機能だけど別の機能。 三行で Emacsでの「ローカル」とは、変数にバッファごとに独立した値を保持できることです。 make-local-variableは、来ローカルでない変数を現在のバッファで一時的にローカルにします。 make-variable-buffer-local は、その変数が常にローカルとしてセットされるようにします。 この両者の関係は、Emacs 24.3で追加された subr.el を見ればわかりやすいです。 emacs-26.0.91より抜萃。 (defmacro setq-local (var val) "Set variable VAR to value VAL in current buffer." ;; Can't use backquote here, it's too early in the bootstrap. (declare

    make-variable-buffer-localとmake-local-variableの関係 - Qiita
  • PHPにおけるvoidとは何か - Qiita

    PHPの文脈ではvoidはいくつかの異なる意味で利用されます。 そもそもvoidってなんだ void(ボイド)は、プログラミング言語において、「何もない」といった意味の型などに使われる名前である。プリミティブとしてキーワードないし予約語であることも多い。 (void (コンピュータ) - Wikipedia1より引用) C言語では「引数を受け取らず、引数を返さない」関数のプロトタイプを void f(void); のように記述できますね。 PHPマニュアルにおけるvoid PHP: ドキュメントにおける疑似的な型および変数 - Manualに記載があります。 返り値の型が void である場合は、 返り値に意味がないことを表します。パラメータ一覧で void が使用されている場合は、 その関数がパラメータを受け付けないことを表します。 具体的には以下の通りです。 header (PHP

    PHPにおけるvoidとは何か - Qiita
  • いちばん簡単なEmacsコマンド - Qiita

    Emacsを使ってるけどLispは書いたことがないとはよく聞きますが、ちょっとした処理をするのにEmacsコマンドを定義するのは有用なので、割と簡単めなものを紹介していきます ヾ(〃><)ノ゙☆ そもそもコマンドとは何か Emacsにおけるコマンドとは、コマンド定義の最初(引数または説明文字列の次)の場所に(interactive)と書かれた関数のことです。 このコマンドはキーバインドを割り当てるか、M-xで検索して実行することができます。 個人で利用するコマンドはinit.elとか.emacsとかのファイルに雑に書いてやれば動きます。 Lispってどう書けばいいの そもそもEmacsの設定もあまり馴れてない場合はEmacsを書く前のLisp - Qiitaを読んでください。 おてがるなコマンド すごく簡単には、こんなEmacsコマンドを作るのはおてがるです。 ファイル(ディレクトリ)を開

    いちばん簡単なEmacsコマンド - Qiita
  • composer.jsonのrequireを直接編集してはいけない - Qiita

    Composerで依存関係を追加する際に「composer.jsonを編集してrequireに追加してください」といった作業指示が時折見られますが、それはバッドノウハウです。 原則 依存関係を追加・削除するときはコマンドラインから composer require vendor/package で追加 composer remove vendor/package で削除 composer require --dev vendor/package で開発時に必要なものを追加 composer remove --dev vendor/package で開発時に必要なものを削除 番運用環境と同じバージョン・近い環境で実行する さもなくば、依存パッケージのバージョンを自分で特定しなければならなくなる 依存関係をアップデートするときに引数なしで composer update してはいけない マイ

    composer.jsonのrequireを直接編集してはいけない - Qiita
  • phpcon2017 セッションまとめ(11:00~) - Qiita

    最大のPHPイベントであるPHPカンファレンス2017は10月8日に大田区産業プラザ PiOで開催されます。このイベントの特徴は入場無料で同時、最大6セッション・1スポンサートーク・1ワークショップが並列で開かれること。 この記事では、各セッションの発表の概要および注目すべきポイント、予習のため発表者の過去のスライドなどを私見でまとめます。 11:00 (6セッション) Apache Kafkaによるスケーラブルアプリケーション開発 大規模なアプリケーション、ビッグデータ処理に欠かせないApache Kafkaを使い、PHPを使った大きなアプリケーションやマイクロサービスアーキテクチャに対してどの様にアプローチすべきか、大きなアプリケーションで起こる問題をどうやって解決していくかを実例を交えながら探るセッションです。 発表者 株式会社アイスタイル 竹澤有貴 @ytake 会場 1F大展

    phpcon2017 セッションまとめ(11:00~) - Qiita
  • PHP: Clean Code (clean-code-php) 蜜柑薬 - Qiita

    もくじ はじめに 変数 関数 オブジェクトとデータ構造 クラス S: 単一責任の原則 (SRP) O: オープン/クローズドの原則 (OCP) L: リスコフの置換原則 (LSP) I: インターフェイス分離の原則 (ISP) D: 依存逆転の法則 (DIP) 同じことを繰り返すな (DRY) はじめに この記事はRobert C. Martinの「Clean Code」のソフトウェアエンジニアリングの法則をPHPに適合させたものです。これはスタイルガイドではありません。読みやすく、再利用しやすく、そしてリファクタリングしやすいPHPコードを書くためのガイドです。 ここで挙げられるすべての原則は厳密に守らなくてはいけないわけではなく、少し守らなかったところで一般には許容されます。あくまでガイドラインですが、Clean Codeの著者たちがみな長年に渡って経験してきたことです。 この記事(

    PHP: Clean Code (clean-code-php) 蜜柑薬 - Qiita
  • auto-minor-modeでファイル名によってマイナーモードを起動する - Qiita

    Emacsの機能を有効化する仕組みには、メジャーモードとマイナーモードがあります。この記事では、マイナーモードを簡単に有効化するための機能として、auto-minor-modeを紹介します。 モードとは C言語用モードc-modeや、Markdown用モードmarkdown-modeのような特定の言語モードは、典型的でもっともふつうに利用されるメジャーモードです1。 メジャーモードは、ファイルを開いたときにauto-mode-alistの設定に従って自動的に起動することができます。詳しくは拡張子の関連付け:ファイル名ごとにモードを設定する - Qiitaを読んでください。 しかしながら、同じ仕組みでマイナーモードを起動することはできません。 Emacs Lispパッケージjoewreschnig/auto-minor-modeは、上記のメジャーモードのためのauto-mode-alistと

    auto-minor-modeでファイル名によってマイナーモードを起動する - Qiita
  • includeって書きたくない僕たちのためのオートローディングとComposer - Qiita

    こんにちはこんにちは、PHP書いてますか? include_once してますか? それともキミは require_once 派? ところで、現代的なPHPではクラスファイル(ここではclass, trait, interfaceを含む定義ファイル)では、わざわざファイルをinclude/requireしなくても自動的に読み込む機能をカンタンに構築できる環境があるので、紹介いたします。 この記事は手を動かして動作確認しながら読めるように構成してありますので、斜め読みするだけではもったいないですよ ヾ(〃><)ノ゙ はじめに 今回の記事ではクラスの自動ロード(オートローディング)の概要に絞って解説しますが、名前空間の文法や細かい説明を含めて包括的に解説した記事は、既にWEB+DB PRESS Vol.91|技術評論社にて「PHP大規模開発入門 第12回 名前空間とオートローディング」として発

    includeって書きたくない僕たちのためのオートローディングとComposer - Qiita