SlideShare una empresa de Scribd logo
1 de 36
Descargar para leer sin conexión
リファクタリング
サーバ編
AWS上で構築するRESTfulアプリ勉強会
~Web開発ワークショップ~【第10回】
概要
概要
1. リファクタリング?
2. リファクタリング手順
3. 「コードの匂い」
4. テスト
概要
1. リファクタリング?
2. リファクタリング手順
3. 「コードの匂い」
4. テスト
リファクタリング
=プログラムの動作を
変えずに内部構造を改
善する
リファクタリングの方法
1. メソッドの抽出
2.メソッドの移動
3.オブジェクトによるデータ値の置き換え
4.条件記述の分解
5.メソッド名の変更
等々...
「リファクタリング カタログ」
でググってみてください
概要
1. リファクタリング?
2. リファクタリング手順
3. 「コードの匂い」
4. テスト
リファクタリングの手順
1. リファクタリングすべきか判断する。
2. テストがあるか?なければ書く。
3. リファクタリングする
4. テストする
5. 1に戻る
「5. 1に戻る」、重要!
概要
1. リファクタリング?
2. リファクタリング手順
3. 「コードの匂い」
4. テスト
コードの匂い
リファクタリングすべきコードは
「匂う」
不吉な匂い
1.重複したコード
2.長すぎるメソッド
3.巨大なクラス
4.多すぎる引数
5.変更の発散
6.変更の分散
7.属性、操作の横恋慕
8.データの群れ
9.基本データ型への執着
10.スイッチ文
11.パラレル継承
12.怠け者クラス
13.疑わしき一般化
14.一時的属性
15.メッセージの連鎖
16.仲介人
17.不適切な関係
18.クラスのインタフェース不一致
19.未熟なクラスライブラリ
20.データクラス
21.相続拒否
22.コメント
分類してみました
1.激臭系
2.蓋を開けたら臭う系
3.メンドクサイ系
4.加齢臭系
5.生臭い系
6.汗臭い系
7.ウソ臭い系
ひとつだけ紹介
1.激臭系
• 長すぎるメソッド
•巨大なクラス
•多すぎる引数
•スイッチ文
今回
「長すぎるメソッド」
を
「メソッドの抽出」
でリファクタリング!
概要
1. リファクタリング?
2. リファクタリング手順
3. 「コードの匂い」
4. テスト
テスト
• PHPUnit
• モック
ワークショップ
アップロード
が臭う!
本日のメニュー
1. 事前準備
•ブランチ整備
•composer設定
•phpUnitインストール
•テストDBの作成
2. Lesson1 PHPUnitの設定と簡単なテスト作成
3. Lesson2 アップロード機能のテスト
4. Lesson3 アップロード機能のリファクタリング
事前準備
• gitのブランチを整える
• 前回、前々回不参加の方は
テーブル追加、列追加する
gitのブランチを整える
■masterブランチを前回の内容
を終えた状態にする
■masterブランチを元に、今回
の作業用である、
「vol/10」ブランチを作成する
人によって手順が違い
ます!(重要)
■前回の内容を途中までやった方
■前回の内容を完了した方
■今回から参加の方
gitのブランチを整える
http://
goo.gl/WEHXqX
ジーオーオー.ジーエル/
ダブリューイーエイチエックスキューエックス
ここに詳しく
書いております!
今回のマニュアルにリンクがあります。
※後ほど説明
第5回と第6回に不参加の方は
テーブル追加、列追加をする
•composer設定
•phpUnitインストール
•テストDBの作成
Qiitaの投稿で詳しく!
各Lessonについては
Qiitaの投稿で詳しく!
PHPUnit
テスト失敗時(赤)
PHPUnit
テスト成功時(緑)
RED
GREEN
Refactor
のリズム
public function upload() {
$files = $this->getUploadFileParams();
$owner = $this->Auth->user()['id'];
$numTodos = 0;
$errors = array ();
foreach ( $files as $file ) {
$fileName = $file['name'];
$filePath = $file['tmp_name'];
$todos = file($filePath, FILE_IGNORE_NEW_LINES ¦ FILE_SKIP_EMPTY_LINES);
$assignee = $owner;
$lineNo = 1;
foreach ( $todos as $todo ) {
$data = array ();
$data['todo'] = $todo;
$data['status'] = 0;
$data['owner'] = $owner;
$data['assignee'] = $assignee;
$res = $this->TodoList->save($data);
修正前のupload関数
以下略
クライアントがアップロードを実行した際のPOST
データを取得する
getUploadFileParams
ログイン中ユーザのIDを取得する getLoginUserId
アップロードされたファイル群を読み込んでTODO
としてDBに登録する
registerFilesAsTodos
アップロードされたファイルを1つを読み込んで配
列に格納する
readUploadTodoFile
配列に格納されたTODOをひとつずつDBに登録す
る
registerTodos
バリデーションエラーがあった場合、内容を整形す
る
formatValidationErrorMessage
アップロード処理結果のメッセージをクライアント
向けに整形する
editUploadResponse
メソッドの抽出
マニュアル(Qiita)
http://
goo.gl/yWZD5I
ジーオーオー.ジーエル/
ワイダブリューゼットディー5アイ
はじめましょう!
リファクタリングの方法
1. メソッドの抽出
2. メソッドの移動
3. オブジェクトによるデータ値の置き換え
4. 条件記述の分解
5. メソッド名の変更
等々...
「リファクタリング カタログ」
でググってみてください
おさらい
不吉な匂い
1.重複したコード
2.長すぎるメソッド
3.巨大なクラス
4.多すぎる引数
5.変更の発散
6.変更の分散
7.属性、操作の横恋慕
8.データの群れ
9.基本データ型への執着
10.スイッチ文
11.パラレル継承
12.怠け者クラス
13.疑わしき一般化
14.一時的属性
15.メッセージの連鎖
16.仲介人
17.不適切な関係
18.クラスのインタフェース不一致
19.未熟なクラスライブラリ
20.データクラス
21.相続拒否
22.コメント
おさらい
分類してみました
1.激臭系
2.蓋を開けたら臭う系
3.メンドクサイ系
4.加齢臭系
5.生臭い系
6.汗臭い系
7.ウソ臭い系
おさらい
ダウンロードも
ちょっと臭くないか?
🍻飲みDev🍕 テーマ

Más contenido relacionado

La actualidad más candente

50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック
miso- soup3
 
オフラインファーストの思想と実践
オフラインファーストの思想と実践オフラインファーストの思想と実践
オフラインファーストの思想と実践
Shumpei Shiraishi
 

La actualidad más candente (20)

Test to net core 3
Test to net core 3Test to net core 3
Test to net core 3
 
Service worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたちService worker が拓く mobile web の新しいかたち
Service worker が拓く mobile web の新しいかたち
 
Web アプリケーション開発におけるテストの実践 ~ VSUG Day Summer
Web アプリケーション開発におけるテストの実践 ~ VSUG Day SummerWeb アプリケーション開発におけるテストの実践 ~ VSUG Day Summer
Web アプリケーション開発におけるテストの実践 ~ VSUG Day Summer
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
 
「krew」で淀みない業務システムを実現
「krew」で淀みない業務システムを実現「krew」で淀みない業務システムを実現
「krew」で淀みない業務システムを実現
 
React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話React.jsでサービスを作ってみた話
React.jsでサービスを作ってみた話
 
Isomorphic web development with scala and scala.js
Isomorphic web development  with scala and scala.jsIsomorphic web development  with scala and scala.js
Isomorphic web development with scala and scala.js
 
多分モダンなWebアプリ開発
多分モダンなWebアプリ開発多分モダンなWebアプリ開発
多分モダンなWebアプリ開発
 
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
Azure Functions&Logic Appではじめるサーバレスアプリケーション開発 - 応用編 -
 
2016/12/17 ASP.NET フロントエンドタスク入門
 2016/12/17 ASP.NET フロントエンドタスク入門 2016/12/17 ASP.NET フロントエンドタスク入門
2016/12/17 ASP.NET フロントエンドタスク入門
 
Web技術勉強会第1回目
Web技術勉強会第1回目Web技術勉強会第1回目
Web技術勉強会第1回目
 
50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック50分で掴み取る ASP.NET Web API パターン&テクニック
50分で掴み取る ASP.NET Web API パターン&テクニック
 
ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験ASP.NET WEB API 開発体験
ASP.NET WEB API 開発体験
 
Phpでrest apiを作った話
Phpでrest apiを作った話Phpでrest apiを作った話
Phpでrest apiを作った話
 
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティスコンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
コンポーネント指向による、Reactのベストプラクティスとバッドプラクティス
 
What's Azure DevOps
What's Azure DevOpsWhat's Azure DevOps
What's Azure DevOps
 
Service workerとwebプッシュ通知
Service workerとwebプッシュ通知Service workerとwebプッシュ通知
Service workerとwebプッシュ通知
 
Salesforce DUG TOKYO Meetup #9
Salesforce DUG TOKYO Meetup #9Salesforce DUG TOKYO Meetup #9
Salesforce DUG TOKYO Meetup #9
 
Infra as Code in Azure
Infra as Code in AzureInfra as Code in Azure
Infra as Code in Azure
 
オフラインファーストの思想と実践
オフラインファーストの思想と実践オフラインファーストの思想と実践
オフラインファーストの思想と実践
 

Similar a 第10回rest勉強会 リファクタリング(サーバ編)編

スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類
Yahoo!デベロッパーネットワーク
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
Ohishi Mikage
 

Similar a 第10回rest勉強会 リファクタリング(サーバ編)編 (20)

PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
PHP版レガシーコード改善に役立つ新パターン #wewlc_jp
 
スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類スニペットとウェブカウントを用いたウェブ検索クエリの分類
スニペットとウェブカウントを用いたウェブ検索クエリの分類
 
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システムSIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
SIG-SWO-A1402-09:SPINを用いたトリプルストアの性能評価システム
 
派生開発
派生開発派生開発
派生開発
 
Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例Sansan における Android アプリ自動テスト導入事例
Sansan における Android アプリ自動テスト導入事例
 
Cloud Formation Best Practice
Cloud Formation Best PracticeCloud Formation Best Practice
Cloud Formation Best Practice
 
Spring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web ServiceSpring Fest 2018 Spring Bootで作るRESTful Web Service
Spring Fest 2018 Spring Bootで作るRESTful Web Service
 
App codeでリファクタリング
App codeでリファクタリングApp codeでリファクタリング
App codeでリファクタリング
 
Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
実はとても面白い...Documentation library
実はとても面白い...Documentation library実はとても面白い...Documentation library
実はとても面白い...Documentation library
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 
テストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテストテストしなイカ? Seleniumで自動ブラウザテスト
テストしなイカ? Seleniumで自動ブラウザテスト
 
2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング2018年度 若手技術者向け講座 リファクタリング
2018年度 若手技術者向け講座 リファクタリング
 
IDEALIZE YOU
IDEALIZE YOUIDEALIZE YOU
IDEALIZE YOU
 
アドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニングアドテク×Scala×パフォーマンスチューニング
アドテク×Scala×パフォーマンスチューニング
 
JJUG CCC 2014 ATL
JJUG CCC 2014 ATLJJUG CCC 2014 ATL
JJUG CCC 2014 ATL
 
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
三位一体の自動化で壊せ DevとOpsの壁~アラサーエンジニアの挑戦~
 
OPNFVのコンポーネントと調べ方
OPNFVのコンポーネントと調べ方OPNFVのコンポーネントと調べ方
OPNFVのコンポーネントと調べ方
 
SOE-Loc
SOE-LocSOE-Loc
SOE-Loc
 

第10回rest勉強会 リファクタリング(サーバ編)編