上で構築・運用されています。青色のリンクは、当サイト内のページへの内部リンクです。化されていますので、ページ遷移無しでコンテンツを更新します。20140630001久方ぶりの更新となってしまいましたが、今回はこれまでとは趣向を変えて、当方としては初めての試みとなる英文記事の翻訳です。氏は翻訳を許可してくれています)。原文は、日付的にはかなり以前のものです。おける開発に関してより深い理解を得ることができるものとなっています。考え方に関する解説としても有益であるように思われます。カ所で説明を行っています。翻訳文には、適宜、原文を補完するための情報として、文中および文末に訳注を入れています。以下のリンク先ページで、当方による補足を行っています。後者は、前述した、原文公開後の規約変更に伴い一部読み替えが必要となっていることに対する詳細説明です。3]ではほぼ同内容を文章形式でまとめています)。規約を前提として記述されている。規約も「PSR-4」に準拠したものへと変更された。おいては)、原文・翻訳文の「namespace」における具体的指定、すなわち、「Drupal\hello\Controller」には何ら変更は生じない。従って、原文・翻訳文のサンプルコードの中身には全く影響はない。ファイルの配置」は、新しい規約に対応するために変更する必要がある。「src/Controller/HelloController.php」と読み替える必要がある。FIG」はその規約の発行主体です。それを踏まえて、原文・翻訳文の読み替えに関して最低限必要となる部分のみを抜き出すと、次のようになります。準拠の新規約に基づくディレクトリパス&ファイル名:「src/Controller/HelloController.php」なお、変更に際しての考え方は、この例においては次の通りです。準拠においては不要となる。準拠においては「src」とする。氏のブログポストでした。当時これを読んだ時に、コメントしている他の多くの開発者同様「非常にわかりやい」という印象でしたし、また、コメント欄に「翻訳してもいいですよ」との氏のメッセージがありましたので、「だったら翻訳してみようかな」と思った次第です。スピーカーの方々のプレゼンテーションに大いに刺激を受けたことで、「今回、実際に翻訳してみた」というわけです。含めたオープン・ソース・ソフトウエアのカルチャーに対する興味が今更ながらに高じてきたという要因が大きいように感じています。上の開発者の方々に感謝申し上げます。氏のブログポストの翻訳になります。world(世界の皆さん、こんにちは)[訳者脚注01]。これは私の最初のブログポストです。[訳者脚注02]で働いています。モジュール等の修正プログラムであるパッチを書いたりそのレビューをしたりしてもしています。用のモジュール開発者に会いました。用のモジュール開発に関して、既にブログで投稿し始めています。module」があります[訳者脚注04]。深く突っ込んでみたいと考えています。クラス)」を書くということです。プロジェクトに取り組んだことがあるなら、ここで言及することの全ては、あなたにとって既に深くに身に付いた習慣であることでしょう。おけるオブジェクト指向のベストプラクティスについてここでも少しは学ぶべきことや慣れ親しむべきことがあるかもしれません。皆さん、学ぶことや慣れ親しむことは何と言ってもプログラミングそのものですよね。年間超に渡りベストプラクティスがどんなに大きく変化したのかを見れば、十分お分かりのことだと思います。あるなら、サーバーサイドにおける開発も変化・進化せずに従前のままで停滞していることなどできませんよね?ということで、さっそく始めていきましょう。おいて「Hello」モジュールがどのようなものであるのかを見てみることにします[訳者脚注06][訳者脚注07]。目のファイルは「hello.info」です。認識させるためのファイルです。目のファイルは「hello.module」ファイルです[訳者脚注08]。ここでは、その中で、「hook_menu()」関数を実装しています[訳者脚注09]。link(メニューリンク)」についての指定を行うことも可能です[訳者脚注10]。path」)として(以下同じ))「hello」になります[訳者脚注11]。「hello_page()」関数のコンテンツがリターンされることになります[訳者脚注12]。content」というパーミションを有するように設定されたユーザーのみが閲覧可能であるように指定しています[訳者脚注13]。どのようなリクエストに対しても、「hello_page()」をメモリにロードする必要がある、という点です[訳者脚注14]。それは、ほとんどのリクエストがおそらくは「hello」以外の他のページへのリクエストであるとしても、です。必要時のみ(つまり、「hello」がリクエストされた時のみ)、「hello_page()」を読み込むようにすることができます。目は、このモジュールのための自動テストが存在しないということです。それは次のことをほぼ確約するでしょう。自動テスト無しなら、私は、このモジュールにバグを持ち込んでしまうことになるかもしれないということです。する(寄贈する)なら、バグを持ち込んでしまうかもしれないこのモジュールに対して、他の人がパッチを送信することになるであろうということです。賢く入念な開発者であったとしても、ミスをゼロにすることはできません。ざっくばらんに言えば、私は非効率的に物事を進めることが好きではありません。手動でこのモジュールをテストするようなことはしたくありません。それよりはむしろ、私のためにそれを行ってくれる機械のような仕組みがあれば良いと思います。自動的にそのテストコードを実行してくれるでしょう。work(作業が必要です)」として自動的に設定・提示してくれるはずです。それらは、全て、私が眠っている間に行われます。いうことで、次のコードがテストを伴ったモジュールです。}}さあ、皆さん、いかがでしょうか。object-oriented(オブジェクト指向)になりましたね!。なるのかを見ていくことにしましょう。中に再構成してみることにします。ための名前を選ぶ必要がある、ということです。断っておきますが、私が選ぶであろう名前は次のようにかなり冗長なものとなります。それは「Drupal\hello\Controller\HelloController」です。これは一体何でしょうか?。こんなに長ったらしいのでしょうか?。理由は以下の通りです。上で「hello」という名前が既に使われているかどうかを確認しています。上にある既存のコードなどとコンフリクトを起こすようなモジュールを作りたいとは思わないからです。それはとても重要なことです。世界の中で唯一となる名前を選びます。世界の外側の、更に広い世界においてはどうでしょうか。オープンソースプロジェクトがあります。見つけて「自分達のプロジェクトの中にそれを組み入れたい」と考えたとしたらどうでしょうか。彼ら自身によって開発された「hello」という名前をもつ何らかの構成要素を持っているかもしれません。そこで、私のモジュールの名前の中に「Drupal」という単語を含めることにします。世界の外側のプロジェクトにおいてもコンフリクトを回避できるようなるわけです。あなたはこう思うかもしれません。誰が何の価値を見い出すというのでしょうか」、と。その指摘はまさにその通りです。将来的にはこのモジュールがより興味深いモジュールへと進化・発展することになるかもしれません。いくつかが、より一般的な方法で実際の興味深い問題を解決することになるかもしれません。それが、他の人に何らかの利用価値をもたらすことになるかもしれません。命名について次のように考えます。常に他のプロジェクトにおいても使用可能となるべく命名するようにした方が実際的によりシンプルかつ確実である、と。:「Drupal\hello\」の後に、私はもう一つ「Controller」という名前を追加しています。「Controller(コントローラ)」とは、「MVC」という専門用語における「C」に対応するものです[訳者脚注15]。対してレスポンスを行うべきトップレベルのコードである、とされています。含むように成長するかもしれません。区別することができるようになるわけです。おいて「namespace(名前空間)」として知られているものです。関連するアイテムをグルーピングするべく機能する、ファイルシステムにおけるディレクトリと類似のものである、とされています[訳者脚注16]。つが各階層においてグルーピングの機能を果たすわけです。全てをグルーピングします。寄贈されたモジュール)」を含みます。全てをグルーピングします。モジュールの中の「controller」の全てをグルーピングします。自身に対して命名する必要があります。そこで、私は、今のところ、それに対して「HelloController」という名前を選んでいます。中に含まれているにも関わらず、です。機能や役割が明確になるように、その一つ一つに意味のある適切な名前を付けることができるでしょう。持っているだけですし、それに対して何らかの名前をつけるという必要に迫られているだけです。私は、今のところ、その冗長さを受け入れているというわけです。name(クラス名)を持っています。サイトのディレクトリ構造の中に配置するために、それを格納するファイルの名称を決定する必要があります。そのファイル名がクラス名に適合することを要求します。その命名規約に従うと、具体的には、「lib/Drupal/hello/Controller/HelloController.php」となります。段階の深さにあることが要求されるわけです。理由は以下の通りです。日時点のものであり、「PSR-0」準拠であった過去の規約に基づくものです。ファイルの配置」に関する具体的指定は、「PSR-4」準拠となった現在の規約には適合しなくなっています。段階の深さにある」となります。変更に際しての考え方は、この例においては次の通りです。(1)「PSR-0」準拠において要求された「Drupal/hello/」というディレクトリパスは不要となる。区別して管理するために必要とされます。「PSR-4」準拠となった現在の規約には適合しなくなっています。現在の規約に従うと、「「src」ディレクトリ」となります。:ディレクトリパスの一部分である「Drupal/hello」は、「PSR-0」に従う必要があります。「PSR-0」とは、完全なクラス名はファイルシステム上で表されなければならないとする規約です。標準化グループは、これを要求しないような新しい規約を作るべく検討しているところです。彼らが他の規約を受け入れるよりも新しい規約を作ることを優先するならば、それは「PSR-4」と命名されるはずです。モジュールの中でより浅いディレクトリパスが使用可能になることでしょう。説明の通り、この段落全体の記述(特に赤字部分のファイルパス)は、「PSR-0」準拠であった過去の規約に基づくものです。ファイルの配置」に関する具体的指定は、「PSR-4」準拠となった現在の規約には適合しなくなっています。仮に、現在、原著者が追記するとしたら、次のようになるものと考えられます。関する新しい規約「PSR-4」が承認されました。規約を「PSR-4」に準拠するように変更しています。そのため、現在では、「PSR-0」準拠では要求された「Drupal/hello」というディレクトリパス(赤字部分)は不要となり、その分だけより浅いディレクトリパスが使用可能となっています。「PSR-4」準拠となった現在の規約においては「src/Controller/HelloController.php」となります。:最初に「冗長である」と言いましたが、その次にある「Controller」ディレクトリは役に立ちます。何より、このモジュールがより多くのクラスを持つまでに成長した時に、そこでクラスやファイルをグルーピングしやすくなるからです。以上で一通りの説明を行ったことになります。おいては次のようになります。「PSR-4」準拠となった現在の規約には適合しなくなっています。現在の規約に従うと、「src/Controller/HelloController.php」となります。彼が「HelloController」を少し強化していることに気が付くことでしょう。そのような対応は、この例の場合のような、外部のコードをコールしない大変シンプルなコントローラーにとっては必須ではありません。私の将来のブログポストにおいてもより深く検討してみたいと考えています。関数の中の一部は「.routing.yml」ファイルに記述することになりました。[訳者脚注19]それらを追加すると、テスト以外の完全なモジュールは以下のようになります。「PSR-4」準拠となった現在の規約には適合しなくなっています。現在の規約に従うと、「src/Controller/HelloController.php」となります。中に位置付けられている必要があります。それは、今のところは、規約「PSR-0」に適合するファイル名でなければいけません。つのクラスでなければならない(2)単一のテストファイルの中に全てをひとまとめにすることはできないということを意味しています。テストをポーティングするためのいくつかの他の変更もあります。notices」で読むことができますが、ここでも以下にその要諦となるポイントを掲載しておきます。ファイルの配置」に関する具体的指定は、「PSR-0」準拠であった過去の規約に基づくものです。現在の規約に従うと、「規約「PSR-4」に適合するファイル名でなければいけません。中に配置されることになるでしょう。あることが可能です[訳者脚注20])。ベストプラクティスの技術のための舞台を整えます。引き続き、私のサイト「http://effulgentsia.drupalgardens.com」をチェックしてみてください[訳者脚注21]。中にある必要があります。世界の外にあるどんなコードともコンフリクトしたりしないようになります。使いたいであろうなどとは思わないかもしれません。あなたは、その可能性を完全にかき消すようなことをするべきではありません。結局、オープンソースとは、どんなことでも「共有する」ということなのです。構造に合致したディレクトリ構造を伴って、それ自身のファイルの中に配置します[訳者脚注22]。私の人生における正真正銘初めてのブログポストを読んでくださってありがとうございます。今回の、そして、今後のブログポストが、あなたにとって何かしら役立つものとなるようでしたら幸いです。以下のような、複数の意味が込められているように思われます。(1)文字通り、原著者のブログデビューに際しての挨拶。開発手法を、「Hello」モジュールを通じて紹介とすることに対する暗示。外部の世界と接近・遭遇することに対する暗示。側から歓迎・歓待することに対する暗示。専門のクラウド・ホスティング・サービス等を展開している企業です。氏を補佐する、技術とマーケティングの両分野に渡る領域を担当する部門であるようです。ような働きを担うファイル群のことです。リクエストに対して、レスポンスを行うための一連のワークフローをバックグランドで遂行し、その過程において、適宜「hook」と呼ばれる仕組みにより「module(モジュール)」「theme(シーム)」と連携しつつ、それらに具体的な仕事させることで、CMS・フレームワークとして一貫性のあるレスポンスを生成・管理しています。ラーニングサービスを展開する企業のサイト上にあります。開発などに貢献されておられるようです。[訳者脚注05]:この部分の原文は以下のようになっています。earlier」という部分と関係があるのか、という点について、英語文法面および事実面から、何らかの確信をもつことができませんでした。そこで、翻訳文では、「and」を単に「そして」として、原文をそのまま直訳しています。氏の経歴にも関わることですので、該当する原文を引用させていただき、ご判断いただきたく思います。ユーザーとなり、活発な開発歴を有しておられるようです。World.」などと表示させるだけの非常にシンプルなプログラムを題材にすることが通例となっています。短時間で大きな学習効果を得られる実際的・実践的なものであります。つファイルが必須とされています。つのファイルを作成しています。連携機能部分を実装する役割を、それぞれ担っています。点を、読者であるモジュール開発者に例示しています。様々な連携を行うためのコードを記述するという役割を担うファイルです。おいては、各モジュールがルーティング等の設定を行うための機能を担います。命名規約に従い、このサンプルコードにおいては「hello_menu()」となります。link」については指定されていません。「www.example.com/?q=hello」もしくは「www.example.com/hello」になります(以下同じ)。URL」機能が有効化されているかどうかに依存します(有効なら後者になります)。path」と呼ばれるものに該当します。つの要素をもつ連想配列を返すようになっています。array」)」と呼びます。コアの「t()」関数がリターンする結果がそのまま表示されるようになっています。英語を主言語としたサイトにおいて多言語対応として日本語ページ用に「こんにちは」と出力させるなど、コンテンツを様々な言語にローカライズやカスタマイズして表示させることを可能とするものです。このようなトランスレーションを考慮しないならば、このサンプルコードにおいて、出力は、単に「Hello.」という文字列そのものとなります。デフォルトのアクセス管理関数である「user_access()」が指定されています。[訳者脚注14]:「hello_page()」関数が毎回メモリにロードされるのは、サイトにおいて有効化された全てのモジュールの「.module」ファイルがリクエストの都度毎回読み込まれることになるためです。[訳者脚注15]:「MVC」は、周知の通り、それぞれ「Model」「View」「Controller」を意味しています。「MVC」よりも「PAC」という概念との親和性が高いという観方もあるようです。「theme」が主に「プレゼンテーション面(表示面)」の仕事を担当することが期待されています。行うべき仕事を実装・実行することも可能であったわけです。テンプレートエンジンとして「twig」が採用されました。theme(プレゼンテーション面)との役割分担はより明確・厳密になっています。ドキュメント」とは、「名前空間の概要(英語版)」であると思われます。ファイルを読み込むということです。「ControllerInterface」は「ContainerInjectionInterface」へと名称変更となっているようです(参照)。「hook_menu」関数については、ここで言及されているルーティング機能だけでなく、これまで担ってきたその機能の全てを別の設定ファイルに移行するものとされています。現段階においては、「.module」ファイルにおいて「hook_menu」関数の実装はもはや不要となっています。原文・翻訳文のサンプルコードのように「.module」ファイルに「hello_menu」関数が記述されていたとしても、そのままでも動きます。「.module」ファイル上の「hello_menu」関数はコールされることが無い、つまり、その記述は何の意味も持たないということであり、したがって、「.module」ファイルから「hello_menu」関数の記述を削除するということが本来的対応ということになります。「hook_menu」関数はこれまで担ってきたその機能の全てを別の設定ファイルに移行するものとされており、その結果、「hook_menu」という「hook」そのものが存在しないことになっています。[訳者脚注22]:この部分も、狭義には、すなわち、厳密には「PSR-0」を前提した記述であると考えられます。広義には、「namespace」と「ディレクトリ構造」の関係に一定のルールが要求される「PSR-4」においても成り立つ記述であると言えます。CORNERこのページにつきまして、お問い合わせ・ご相談・ご意見等をお待ちしております。コンタクトすることができますので、お気軽にご連絡いただけましたら幸いです。印が付いているのは、必須項目です。単独の有料電子新聞としては、WSJ(非公式推計で90万人)を抜いて、世界最大規模ということになりそう。契約数の増加には、米国外での読者増加も貢献とのこと。レスポンス」の3つを等しく重視すべき、とのこと。よる「ものの見方とモノクロ写真」に関する哲学的考察も面白い。現象学する氏の今後の写真にも期待。工業用レンズ(産業財)のノウハウを消費財用に活用したとの事。引退技術者の活用など、老舗ブランドにおける技術承継の事例としても興味深いです。TransNetCreationピアノ&ボーカルスタイルでのセルフカバーアルバムが出るようで・・・こんな感じなら聴いてみたい(実際にはもう少し色んな楽器が加わる・・・のかも)。ModuleTransNetCreation(トランス・ネット・クリエイション)。