- 1. プログラムの可読性を上げるための条件分岐を減らす方法7個
- 2. Laravel で Fat Controller を防ぐもうひとつの Tip
- 3. 日本語専用のPHPランダムジェネレータを作りました
- 4. Herokuにデプロイしたら画像が突然取得できなくなった
- 5. マジックメソッドのPhpDocを自動生成する方法
- 6. PhpDocが書かれているかどうかをチェックする方法
- 7. カスタム投稿タイプの作り方
- 8. PHP の Rest で Cloud Firestore のデータを削除 (Delete)
- 9. PHP の Rest で Cloud Firestore のデータを更新 (Update)
- 10. PHP の Rest で Cloud Firestore のデータを読む (Read)
- 11. PHP の Rest で Cloud Firestore のデータを作成 (Create)
- 12. Moodle 3.8 マニュアル – frankenstyle
- 13. Moodle 3.8 マニュアル – カテゴリ:プラグイン
- 14. ジェネレータで大量データをCSVにファイル分割して書き込む
- 15. 標準入力でCSVをPHPに渡し配列にする
- 16. 無料でPHP使ってWebAPIをつくってみた
- 17. HTML5のdraggable属性で自由にドラッグ&ドロップ
- 18. twitterの情報発信を助けるWebサービス「EMOEMO」やっと公開です!
- 19. Laravel で Fat Controller を防ぐ 5 つの Tips
- 20. VSCodeのおすすめ設定(CakePHP開発用)
プログラムの可読性を上げるための条件分岐を減らす方法7個
受託開発エンジニアでプロジェクトリーダーという立場になるにあたって品質保証について考えるようになりました。
品質と一口に言っても「内部品質」と「外部品質」の2点がありますが、エンジニアである以上、内部品質の向上が外部品質を上げる最適解だと思います。
※内部品質、外部品質については[こちら](https://speakerdeck.com/twada/quality-and-speed-2020-spring-edition)を参照。
そして内部品質を上げるためにはアーキテクチャを考えることが大切ですが、既存プロジェクトの場合はアーキテクチャが ~~存在しないレベルでぐっちゃぐちゃ~~ 十分に検討されていないケースも多いです。
そこで、一番手っ取り早くプログラムの可読性を上げる方法は、新規に書くコードをできるだけシンプルに実装することです。今回はその中でも個人的に使っている条件分岐を少なくする or 見やすくするテクニックについてまとめてみました。
## 条件分岐を減らす方法7個
今回の分岐を減らす方法ですが、基準としては
– 1メソッドあたりの[循環的複雑度](https
Laravel で Fat Controller を防ぐもうひとつの Tip
## この記事について
先日書いたこちらの記事の補遺です。
[Laravel で Fat Controller を防ぐ 5 つの Tips – Qiita](https://qiita.com/nunulk/items/6ed409345efb6ee4f660)
> Fat Controller になる主な要因として、Model 層が貧弱すぎる、ということが考えられます。本来 Model に書くべき処理を Controller に書いてしまっており、結果的に可読性が悪くなったり、ひとつのユースケースに対する変更が他のユースケースに影響を及ぼしたり、Controller 間でのコピペコードを量産したり、ということが起きます。
と書いておきながら、「本来 Model に書くべき処理を Controller に書いてしまって」いる例を書きそびれたので、それについて補足します。
## はじめに
### 「Model に書くべき処理」とは
本記事では「Model に書くべき処理」を以下のように定義します。
1. Model の状態を変更する処理
2. Model の状態による条件
日本語専用のPHPランダムジェネレータを作りました
PHPのランダムジェネレータは[fzaninotto/Faker](https://github.com/fzaninotto/Faker)は有名です。
名前などの日本語バージョンもありますが、単語、住所、メールなど色々欲しい物がなかったので、`fzaninotto/Faker`を利用して、作りました。
➡︎ [Github⛩](https://github.com/xyyolab/faker-japanese)## インストール
コンポーザー利用、インストール
“`bash
composer require xyyo/faker-japanese
“`## 使い方(ほぼ全ての例)
– 元々日本語特定用の`Faker\Factory::create(‘ja_JP’)`は不要
– 全てのロジックは自分のプロバイダーに以下の例をご覧ください。
“`php
Herokuにデプロイしたら画像が突然取得できなくなった
##Herokuにデプロイした直後に画像が消える
開発環境:cloud9
言語:PHP7.2
フレームワーク:Laravel 5.5ローカルサーバーでLaravelのプロジェクトを起動していた時はアプリ内で画像は問題なく表示されていました。ちなみにこの時から画像はAWSのS3に保存して取得するようにしていました。アプリの最低限の機能ができたのでherokuへデプロイしてみましたが、画像が一切読み込めなくなりました。おまけに、表示されるエラーが”something went wrong.”だけなので困りました。
##Herokuのログを確認
とりあえず不具合の原因を探るためにhrokuのログを確認してみました。“`
$ heroku config:set APP_LOG=errorlog
$ heroku logs
“`ログを見ると、S3の関連でエラーが出ていることが分かりました。
##HerokuにS3用の環境設定をしていなかった
初心者あるあるかもしれませんが、非常に初歩的なミスで、HerokuのconfigファイルにS3の設定を書き込んでいませんでした。という
マジックメソッドのPhpDocを自動生成する方法
# はじめに
Laravelにはide-helper(php artisan ide-helper:models)というphpdocを自動生成してくれる便利なライブラリがありますが、ide-helperの対応範囲外のクラスにおいてもこれと同じようなことができないかということを考えてみました。# 実現したこと
クラス内のプロパティに関するgetメソッドのphpdocを自動生成いたしました。
このことによりgetterメソッドを毎回書く必要がなくなり、getのマジックメソッドを基底クラスに一つ書いておくことでコード全体をすっきりとさせることができます。# 仕組み
PHPにはクラス情報を取得するReflectionClassという関数があります。
この関数を使うとなんと!PhpDocの情報やプロパティの情報も取得できたりします。
つまり既存PhpDocの内容に対し、プロパティのgetメソッドを追加することもできます。
※ide-helperでもこれと似たような手法でPhpDocの自動生成を行っています# サンプルコード
“`php/**
* Class UpdateGet
PhpDocが書かれているかどうかをチェックする方法
# はじめに
PhpDoc皆さん書いてますか?
補完を最大限効かせるためにできれば全部書いていきたいですが、抜けているかどうかのチェックを目視で確認するのって面倒ですよね。
面倒なことは自動化しちゃいましょう!# 仕組み
PHPにはクラス情報を取得するReflectionClassという関数があります。
そして、この関数を使うとなんと!PhpDocの情報も取得できたりします。
つまり、書いてなければnullが返ってきます。
※補足すると各メソッドの行番号やプロパティの内容、publicかどうかなども取得できます。# サンプルコード
“`php
/**
* Class PhpDocCheckCommand
*/
class PhpDocCheckCommand extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = ‘php_doc_check {ta
カスタム投稿タイプの作り方
カスタム投稿を作成するとき、何かと忘れてしまうのでメモ。✍️
“`php:functions.php
add_action( ‘init’, ‘create_post_type’ );
function create_post_type() {
register_post_type( ‘news’, [ // 投稿タイプ名の定義
‘labels’ => [
‘name’ => ‘プロダクト’, // 管理画面上で表示する投稿タイプの名前
‘singular_name’ => ‘Product’, // 管理画面上で表示する投稿タイプの名前(単数)
],
‘menu_icon’ => ‘dashicons-admin-page’, // 管理画面上で名前の左に表示するアイコン
‘public’ => true, // 投稿タイプをpublicにするか
‘show_in_rest’ => true,
PHP の Rest で Cloud Firestore のデータを削除 (Delete)
“`php:firestore_delete_rest.php
#! /usr/bin/php
PHP の Rest で Cloud Firestore のデータを更新 (Update)
“`php:firestore_update_rest.php
#! /usr/bin/php
PHP の Rest で Cloud Firestore のデータを読む (Read)
“`php:firestore_read_rest.php
#! /usr/bin/php
PHP の Rest で Cloud Firestore のデータを作成 (Create)
“`php:firestore_create_rest.php
#! /usr/bin/php
Moodle 3.8 マニュアル – frankenstyle
[原文](https://docs.moodle.org/dev/Frankenstyle#Plugin_types)
# Frankenstyle
‘Frankenstyle コンポーネント名’ は、Moodle プラグインをプラグインとその名前で識別するための命名規則です。Moodle コード全体で(顕著な例外はテーマの css クラス名です)使用されています。
Martin Dougiamas が Petr Škoda が発明した ‘frankenstyle’ というを単語を命名システムとして記述することを発明しました。
内容
[1 フォーマット](#1-フォーマット)
[2 プラグインタイプ](#2-プラグインタイプ)
[3 コアサブシステム](#3-コアサブシステム)
[4 使用方法](#4-使用方法)
[4.1 関数名](#41-関数名)
[4.2 クラス名](#42-クラス名)
[4.3 定数](#43-定数)
[4.4 テーブル名](#44-テーブル名)
[4.5 プラグイン設定テーブル](#45-プラグイン設定テーブル)
[4.6 ケーパビリティ](#46-
Moodle 3.8 マニュアル – カテゴリ:プラグイン
Pages in category “Plugin”
The following 261 pages are in this category, out of 261 total.
2
2D/3D structure display short answer
3
360-degree feedback module
A
Adaptable theme
admin/setting/atto styles settings
admin/setting/blocksettingslideshow
admin/setting/themesettingaigne
Algebra question type
All or nothing multiple choice question type
Assignment files report
Attendance activity
Atto Word import
auth/dev
Availability dataformcontent
AzuresearchB
Benchmark report
BigBlueButtonB
ジェネレータで大量データをCSVにファイル分割して書き込む
みんな大好きジェネレータ。クラスとか定義せずにジェネレータだけで綺麗に書けるぞ。
## 背景
もともとは仕事で書いたコード。先日開催された[PHPerKaigi 2020](https://phperkaigi.jp/2020/)で[ジェネレータの事例紹介](https://fortee.jp/phperkaigi-2020/proposal/5b1651a5-0a01-4b49-b338-e332f981bf5d)として出したので、ここで見せます。
## 要件
* データベースから値を取り出してCSVにダンプしたい
* レコード数 = とにかくいっぱい
* 全レコードを1クエリで全部取得するのはメモリ量としてもDBの負荷としても許容できない
* CSVは表計算ソフトで読み込ませる必要がある
* 表計算ソフトという括りではExcelに限らず65535行以上のCSVを扱えるのは稀なので、ファイルには65534レコードごとにファイルを分割する。## 実装
おいらは3重ループとか4重ループとか多重ネストさせるのは絶対に嫌なのでジェネレータで処理を分割
標準入力でCSVをPHPに渡し配列にする
#やること
csvをshellスクリプトで標準入力し、phpファイルで加工する#コード
“`
無料でPHP使ってWebAPIをつくってみた
# はじめに
以前つくった[文字列→塩基配列の相互変換ツールをつくってみた(アプリ版)](https://qiita.com/am10/items/3ecac20451c82133e900)のWeb版(PHP)が[これ](https://qiita.com/am10/items/2516fa04def815195ffe)により不要になってしまいました:scream:せっかく作ったPHP版も何かに使えないかと思いAPI化してみました:clap:
*注意 httpです:see_no_evil:
# 成果物
## ドキュメント
BluePrintでAPIドキュメントみたいなのつくってみましたので詳細はこれを見てください:bow:[http://adventam10.php.xdomain.jp/dna/api/](http://adventam10.php.xdomain.jp/dna/api/)
## ソース
下記の dna-converter.php です。[https://github.com/adventam10/DNAConverter-web/tree/mast
HTML5のdraggable属性で自由にドラッグ&ドロップ
HTML5のdraggable属性とjavascriptを使用して自由にドラッグドロップできるようにしました。
下のコードを完コピしてもらえれば確認していただけると思いますが、
左側にドラッグ対象の要素(numberBox)が縦に20個並んでいるボックス(drop_back_box)があり、
右側には横長のボックス(dropBox)が縦に5個並んでいます。
numberBoxをdropBoxやdrop_back_boxにドラッグ・ドロップするのは簡単にできたのですが、
dropBoxに複数ドロップされたnumberBox間で左右にドラッグドロップできるようにするのに
かなり手こずってしまいました。
ドロップされたnumberBox間で左右にドラッグドロップするためにはnumberBox自体に
ondrop属性を持たせてjavascriptのinsertBeforeを使用することで簡単にできました。。。
こんな簡単なことをなぜすぐに気づかなかったのか。。。HTML5のdraggable属性はドラッグした要素やドロップ先の要素の情報を取得できるのでかなり便利です。
コ
twitterの情報発信を助けるWebサービス「EMOEMO」やっと公開です!
#[EMOEMOはこちら](http://emotionalemo.herokuapp.com/)
#はじめに
こんにちはてらです!:relaxed:
簡単に自己紹介をするとごみくずプログラミング初学者です。(3ヶ月目)
現在個人開発中のWEBサービス(EMOEMO)をデプロイする予定だったのですが、想定外のバグが発生し、
デプロイはもう既にしているのですが公開できない状態に陥りました。やっと修正を終えたのでお披露目したいと思います。
では早速![EMOEMO](http://emotionalemo.herokuapp.com/):↓LP部分
#目次
– EMOEMOとは?別記事で紹介しています。[こちら](https://qiit
Laravel で Fat Controller を防ぐ 5 つの Tips
## この記事について
Laravel は Policy や FormRequest など、Controller を補佐するモジュールを多く提供しているので Fat Controller になりにくいとは思いますが、それでもときどき Fat Controller に出くわすことがありますので、それらを防ぐために使えるテクニックというか、Tips を5つばかり紹介したいと思います。
## はじめに
### Fat Controller とは?
簡潔にいえば、行数が多く(個人的には Controller だとひとつのメソッドが NCLOC で 50 行を超えると Fat 感を感じます、みなさんはいかがでしょうか)、行数が多いがために処理の流れを追うことが難しく、しばしば不具合の原因になるクラスのことをいうのだと思います。本記事では、ただ行数が多いというだけでなく、複数のメソッドで処理が重複していたり、メソッドの中で条件分岐が発生したりして、ひとつの変更が他の部分に及ぼす影響を検知しづらい状態にあるコントローラーを想定しています。
巨大なクラスであっても、そこに含まれるデータや関数
VSCodeのおすすめ設定(CakePHP開発用)
# はじめに
– こちらの記事の続きです
– [VSCodeのおすすめプラグイン(CakePHP開発用)](https://qiita.com/rowpure/items/4d9df81a4ec4573efdcb)
– ここでは、私がCakePHP開発時に設定しているVSCodeの設定(`settings.json`)を紹介します
– 設定はCakePHPのコード規約に沿うよう、なっております(たしか)# VSCode設定値
“`settings.json
{
// ナビゲーション階層リンクを有効にする
“breadcrumbs.enabled”: true,
// エディタの#editor.tabSize#と#editor.insertSpaces#の設定を強制する
// 例)インデントがTABのファイルを開き編集した際に、TABキーでスペース4つの設定をしていたとしてもTABを入れる機能を無効
“editor.detectIndentation”: false,
// 貼り付けた内容をエディタにより自動的にフォーマッ