投稿

【Android】Dialog(画面)をスライドして表示する

イメージ
Androidアプリケーションで画面をスライドして表示させる方法のまとめです。 アニメーション定義 まずはスライドアニメーションを定義します。 resディレクトリ配下にanimディレクトリを作成し、以下ファイルを用意します。 res/anim/slide_in.xml <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fillAfter="false" android:fromXDelta="100%" android:fromYDelta="0" android:toXDelta="0" android:toYDelta="0" /> res/anim/slide_out.xml <?xml version="1.0" encoding="utf-8"?> <translate xmlns:android="http://schemas.android.com/apk/res/android" android:duration="500" android:fillAfter="false" android:fromXDelta="0" android:fromYDelta="0" android:toXDelta="100%" android:toYDelta="0" /> durationでスライドの速さを調整します。 スライドインするときはX座標

【Azure】Microsoft Azureについて(認定資格)

AzureはMicrosoftが提供するクラウド型サービスです。 これまでAmazon AWSに触れる機会が多くいくつか記事にもしてきましたが、近年シェアを伸ばしてきているのと、最近仕事で少し触れる機会があったので今後のためのメモとして残していこうと思います。 AWSとAzureのクラウドサービスにおけるシェアと売り上げ増加率   全体のシェア 売り上げ増加率 AWS 31% 48% Azure 18% 89% (2018年時点) これを見るとシェアでこそAWSに劣っていますが、その伸び率はAWSを追い越さんばかりの勢いです。 ※以下記事より抜粋しました。このほかにもAWSとAzureの双方のメリットデメリットが詳しく記載されています。 AWSとAzureの概要と比較!マルチクラウドについても解説 https://business.ntt-east.co.jp/content/cloudsolution/column-06.html 今後の記事が何かの役に立ちましたら幸いです。 認定資格 Microsoft公式のAzure認定資格については以下のようにセクション、およびレベル毎に用意されています。 Azure Fundamentals 受験料 ¥12,500 内容 Cloudの概念を理解 コアな Azure サービスを理解 セキュリティ、プライバシー、コンプライアンス、信用について理解 Azure の料金プランとサポートについて理解 公式ページ https://docs.microsoft.com/ja-jp/learn/certifications/azure-fundamentals Azure Administrator Associate 受験料 ¥21,103 内容 Azure サブスクリプションとリソースを管理する ストレージの作成と管理 仮想マシン(VM)の展開と管理 仮想ネットワーク

【PHP】Amazon SESでEメール送信

aws-sdk-phpを利用してAmazon SESからEメールを送信する方法のまとめです。 ※aws-sdk-phpのセットアップは以下リンク参照 【AWS】S3へファイルアップロード(PHP) 公式の詳細はこちら https://docs.aws.amazon.com/ja_jp/ses/latest/DeveloperGuide/send-using-sdk-php.html 実装 名前空間の定義 use \Aws\Credentials\CredentialProvider; use \Aws\Ses\SesClient; use \Aws\Exception\AwsException; 処理 /** * Amazon SES Sendmail * @param string $subject * @param string $body * @param string $to * @param string $from_email * @param string $from_name = null * @return bool * @throw Exception */ public static function send( string $subject, string $body, string $to, string $from_email, string $from_name = null ) : bool { try{ // ① 認証情報を取得 $provider = CredentialProvider::defaultProvider(); // ② SES Clientオブジェクト生成 $client = new SesClient(array( 'region' => 'us-west-2', 'version' => '2010-12-01', 'credentials' => $provid

【PHP, JavaScript】POSTデータが多すぎてエラーになったときにとった対応

画面からユーザーの入力値をPOSTするプログラムで500エラーが発生し、エラーログを確認すると以下のメッセージを吐いていました。 *413 FastCGI sent in stderr: "PHP message: PHP Warning: Unknown: Input variables exceeded nnn. このエラーはユーザーの入力値が多すぎて、submitしたときサーバー側で弾かれているエラーで、しきい値は php.ini の以下で設定できます。 php.ini ; How many GET/POST/COOKIE input variables may be accepted max_input_vars = 100 しかし本来セキュリティの観点から、この値は抑えられている(デフォルトは1000)ケースがあります。その場合は、フロント側で吸収する必要があるためその方法をまとめます。※あくまで一つの例なので他に良い方法があるかもしれません。 今回発生したケースでは、ユーザーや店舗などの設定値を縦に並べて一括で更新するという処理で、100は余裕で超えてしまうため対応を行いました。 POSTデータを入力するView(修正前) (※だいぶ簡単にしたもの) <form method="post" action="/users/index"> <input type="submit" name="regist">更新</input> <?php foreach($users as $user):?> <label><?php echo $user['id'];?></label> <label><?php echo $user['name'];?></label> <input type="text" name="age[<?php echo $user['id'];?&

AWS-CLI使い方まとめ(S3編)

本番環境へSSH接続できなくて(権限なし)、DBのdumpファイルをどうやってGETしようか試行錯誤した時の方法です。 セッションマネージャーからAWS-CLIでS3バケットにアップロードして、S3経由で取得できました。 これは色々応用できるなと思い、AWS-CLIの使い方をまとめておきます。 ということでまずはS3操作について... 事前準備 AWS-CLIのインストール https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-chap-install.html $ aws --version aws-cli/1.16.170 Python/3.7.4 Darwin/17.5.0 botocore/1.12.160 設定 以下2ファイルを用意 (無ければ作る) $ cat ~/.aws/config [default] region = ap-northeast-1 $ cat ~/.aws/credentials [default] aws_access_key_id = AAAAAAAAAAAAAAAAAAAA aws_secret_access_key = BBBBBBBBBBBBBBB/CCCCCCCCCCCCCCCCCCCCCCCC ※複数環境を使い分ける場合は、credentialsに設定した[キー]を --profile [キー] で指定する バケットの一覧 書式 aws s3 ls 使用例 $ aws s3 ls 2019-10-02 12:57:09 test.images 2019-10-25 11:52:43 test.bucket 2019-10-23 17:46:10 test.xxxxxxxx 指定バケット配下のファイルの一覧 書式 aws s3 ls {バケット名} 使用例 $ aws s3 ls test.bucket 2019-10-04 18:24:00 1289018 image-0001.png 2019-10-03 16:09:47 1289018 image-0002.p

PHPUnitを使う(初期セットアップとかんたんな使い方)

導入から簡単なテストコードの実行までの手順のまとめ セットアップ composerを使ってインストール $ composer global require "phpunit/phpunit:*" $ ~/.composer/vendor/bin/phpunit --version PHPUnit 7.5.17 by Sebastian Bergmann and contributors. インストールされるディレクトリ cd ~/.composer/vendor/phpunit/phpunit テストコードの書き方 ここでは名前を保持するUserクラスのテストコードを書いてみる テスト対象のモジュール User.php <?php class User { public $name; public function getName() { return (string)$this->name; } } テストコード例 UserTest.php <?php require('TestCase.php'); require('User.php'); use PHPUnit\Framework\TestCase; class UserTest extends TestCase { public function testName() { $params = [ [null, ''], ['', ''], ['Name', 'Name'], ]; foreach ($params as $param) { $user = new User(); $user->name = $param[0]; $name = $user->getName();

【PHP】PHP_CodeSnifferを使う(コーディングルールのカスタマイズ)

phpcsを社内独自のコーディン規約などにあわせてカスタマイズする方法をまとめます。 インストールディレクトリ 以下のディレクトリにインストールされてます。 ~/.composer/vendor/squizlabs/php_codesniffer/ -rw-r--r-- 1 638 10 28 13:36 CONTRIBUTING.md -rw-r--r-- 1 187 11 26 12:08 CodeSniffer.conf.dist -rw-r--r-- 1 6399 10 28 13:36 README.md -rw-r--r-- 1 10085 10 28 13:36 autoload.php drwxr-xr-x 6 192 10 28 13:36 bin -rw-r--r-- 1 1083 10 28 13:36 composer.json -rw-r--r-- 1 1533 10 28 13:36 licence.txt -rw-r--r-- 1 6280 10 28 13:36 phpcs.xml.dist -rw-r--r-- 1 7054 10 28 13:36 phpcs.xsd -rw-r--r-- 1 340 10 28 13:36 phpstan.neon drwxr-xr-x 5 160 10 28 13:36 scripts drwxr-xr-x 16 512 10 28 13:36 src drwxr-xr-x 9 288 10 28 13:36 tests 設定ファイルを用意する CodeSniffer.conf.dist が雛形なのでこれをcpしてやればOKです。 cd ~/.composer/vendor/squizlabs/php_codesniffer/ cp CodeSniffer.conf.dist CodeSniffer.conf コーディングルールのカスタマイズ CodeSniffer.conf <?php $phpCodeSnifferConfig = array ( 'default_standard' => 'PSR2', 'repo

【PHP】PHP_CodeSnifferを使う - 初期セットアップとかんたんな使い方 -

PHP_CodeSnifferとは決められたルールに沿ってPHPコードが書かれているかチェックしてくれるライブラリです。また、ルールに沿った形に整形してくれるPHP_CodeFixerもあります。 事前準備 セットアップ composerを使ってインストールします。 $ composer global require "squizlabs/php_codesniffer=*" ~/.composer 配下に以下がインストールされる $ ~/.composer/vendor/bin/phpcs --version PHP_CodeSniffer version 3.5.2 (stable) by Squiz (http://www.squiz.net) $ ~/.composer/vendor/bin/phpcbf --version PHP_CodeSniffer version 3.5.2 (stable) by Squiz (http://www.squiz.net) phpcsとphpcbfについて phpcs ソースコードがコーディング規約を守っているかを判定する。 phpcbf ソースコードをコーディング規約に合わせて整形する。 対象ファイルを直接編集する。 ルールによっては修正できないものもある。 phpcs (PHP_CodeSniffer) ソースコード例 以下のソースコードを phpcs でチェックしてみます。 test.php <?php $is_echo = true; echo_phpcs($is_echo); function echo_phpcs($is_echo) { if ($is_echo) { echo "hello php_codesniffer!!\n"; } } 判定 $ ~/.composer/vendor/bin/phpcs test.php FILE: /phpcs/test.php ----------------------------------------------------------

【AWS】AWSコンソールのログインに二段階認証(MFA)を設定する

イメージ
AWSコンソールへのログインは通常アカウント、ユーザー名、パスワードによって認証しますが、これにMFAを加えて確実に本人しか認証できないようにするのがベターです。 昨今はセキュリティ対策として様々なシステムで二段階認証が設定できるようになっているのでこれを機に設定しておくと良いと思います。システムが変わっても方法はさほど変わらないはずです。 MFAとは MFA M ulti- F actor A uthentication 携帯電話や他のデバイスを仮想多要素認証として使用することです。 このデバイスをMFAデバイスといいます。 事前準備 ここではMFAデバイスとしてAndroid携帯を使用します。 これにより、このAndroid携帯の持ち主にしか認証できないようにするのが目的です。 認証アプリケーションをインストール 認証用のアプリとして、Google 認証システムを使います。 https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2 これ以外にもいろいろありますが、現時点で使ったことはありません。 この他の認証アプリケーション Symantec製 https://play.google.com/store/apps/details?id=com.verisign.mvip.main マイクロソフト製(Azureはこれじゃないとダメらしい) https://play.google.com/store/apps/details?id=com.azure.authenticator 事前準備は以上 MFAの設定 AWSコンソールへログイン IAM ユーザーアクセスと暗号化キーの管理を開く サービスをクリックして検索窓に iam と入れると出てくる) サイドメニューからユーザーをクリック ユーザーの一覧から自分のユーザー名を探してクリック 認証情報のタブをクリック MFAデバイスの割り当ての「管理」をクリック 仮想MFAデバイスを

【GAS】Google Apps Scriptを使ってみた

イメージ
以前から気になっていましたが、個人的に今一番注目しているサービス、「Google Apps Script(以下GAS)」を使ってみたのでまとめておきます。 Google Apps Scriptとは Googleドライブ上で実行されるScriptで、様々なGoogleサービスと連携したり外部サービスにFetchできる。 また、その実行に関してはトリガーイベントやスケジューリングの設定が可能 コードはJavascriptがベース(npmは残念ながら非対応、Node.jsは使えない) 制約 主な制約については以下の記事に大変見やすくまとめられています。 https://shunsuk.com/gas-quotas/ 個人的に気になっていたのは、無料アカウントでの以下の点 URL Fetch コール数 20,000 / 日 URL Fetch レスポンスサイズ 50MB / コール URL Fetch POST サイズ 50MB / コール 無料枠でこれだけ使えれば十分でしょう。 事前準備 拡張機能Google Apps Scriptを追加 Chromeでウェブストアから拡張機能を追加します。 https://chrome.google.com/webstore/detail/google-apps-script/eoieeedlomnegifmaghhjnghhmcldobl?hl=ja コードから実行まで 新規スクリプト作成 https://script.google.com/ を開いて「新規スクリプト」 ログを出力 保存して実行する 実行するにはまず上段メニューのデバッグ(虫のボタン)で実効できます。構文エラーのときはここで弾かれます。 正常に通ったら「Ctrl + Enter」で実行できます。 フェッチとスプレッドシート操作 少し込み入った処理を書いてみる。以下は東京都の直近1時間の雨量をスプレッドシートに記録するコード function urlfetchTest() { Logger.log('Test Start'); const url = 'https://www.data.jma.go.jp/obd/stats/data/mdrr/pr

【AWS】S3へファイルアップロード(PHP)

以前書いた FuelPHPでファイルアップロード の続きで、Amazon S3へアップロードする部分をまとめます。 事前準備 SDKセットアップ composerを使ってインストールします。 以下をcomposer.jsonに追加してcomposer installを実行します。 "aws/aws-sdk-php": "^3.99" 実装 S3へアップロードする処理 ライブラリ use \Aws\Credentials\CredentialProvider; use \Aws\S3\S3Client; use \Aws\S3\Exception\S3Exception; アップロード処理 // ①認証情報を取得 $provider = CredentialProvider::defaultProvider(); // ②S3Clientを生成 $s3client = new S3Client([ 'region' => 'ap-northeast-1', 'version' => '2006-03-01', 'credentials' => $provider, ]); foreach (Upload::get_files() as $file) { // ③URLを決定 $filename = 'images/'.$file['saved_as']; // ④イメージファイルをバイナリモードで開く $image = fopen($file['saved_to'].$file['saved_as'], 'rb'); // ⑤イメージファイルのContentTypeを取得 $content_type = mime_content_type($file['saved_to'].$file['saved_as']); try{ // ⑥S3へアップロード

【PHP】多言語のデータをCSVに出力する

イメージ
多言語のテキストを含むデータをCSVファイルに出力して、さらにエクセルで開いて編集したいという要件があったのでその時の対応メモです。 多言語データの処理 データ データのイメージとしては以下です。配列に読み込まれた様々な言語のデータをファイルに出力する際の例です。 $data = [ array( 'id' => 1, 'name_ja-JP' => 'テスト', 'name_en-US' => 'test', 'name_zh-CN' => '测验', 'name_ko-KR' => '테스트', ), array( 'id' => 2, 'name_ja-JP' => '茄子', 'name_en-US' => 'eggplant', 'name_zh-CN' => '雄狮', 'name_ko-KR' => '가지', ), ]; NGケース ファイル出力処理 最初は以下のようなコードでした。 エクセルで編集という要件から、Shift-JISに変換して出力しています。 $handle = fopen('data.csv', 'w'); foreach($data as $row){ array_walk($row, function(&$item){ $item = mb_convert_encoding($item, 'Shift-JIS', 'UTF8'); }); fputcsv($handle, $row); } fclose($handle); エクセルで開く 日本語以外のマル

【AWS】Visual Studio CodeでSAMアプリケーション開発

イメージ
Visual Studio Code(以下vscode)でSAMアプリケーション開発をする手順をまとめます。 前提条件 AWS-CLIインストール済み SAM-CLIインストール済み 事前準備 vscodeにAWS Toolkitをセットアップ vscodeを立ち上げてサイドメニューのEXTENSIONSからAWS Toolkitを検索 AWS Toolkit for Visual Studio Codeをインストール サイドメニューにAWSボタンが出てくればOK アプリケーション開発 新規のSAMアプリケーションを作る サイドメニューのAWSをクリック 上段メニューから「Create new SAM Application」 Runtimeを選択(せっかくだからPython3.7を選択する) アプリケーションを配置する場所を選択 (→sam-test-2) アプリケーションの名前を入力 (→sam-test) SAMアプリケーションの作成が完了すると、template.yamlが開く デプロイ設定 template.yaml AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: > sam-test Sample SAM Template for sam-test # More info about Globals: https://github.com/awslabs/serverless-application-model/blob/master/docs/globals.rst Globals: Function: Timeout: 3 Resources: HelloWorldFunction: Type: AWS::Serverless::Function # More info about Function Resource: https://github.com/awslabs/serverless-application-model/blob/mas

【AWS】SAM-CLIでサーバーレスアプリケーション② - Lambda関数のデプロイ -

SAMアプリケーションのデプロイは ビルド → テスト(省略可) → パッケージング → デプロイ の順に行います。 ビルド アプリケーションをビルドする sam build $ sam build Building resource 'HelloWorldFunction' Running NodejsNpmBuilder:NpmPack Running NodejsNpmBuilder:CopyNpmrc Running NodejsNpmBuilder:CopySource Running NodejsNpmBuilder:NpmInstall Running NodejsNpmBuilder:CleanUpNpmrc Build Succeeded Built Artifacts : .aws-sam/build Built Template : .aws-sam/build/template.yaml Commands you can use next ========================= [*] Invoke Function: sam local invoke [*] Package: sam package --s3-bucket [yourbucket] 成功すると .aws-sam/ にビルドされたモジュールが生成されます。 次に必要なコマンドを教えてくれる。(Commands you can use next) が、Invoke Functionはビルドしたアプリケーションをテスト実行してくださいと言っていますが、これに関してはすでに検証済み(と仮定して)なのでスキップします。 なので最後の行、sam packageでパッケージングを実行します。 パッケージング sam packageコマンドでパッケージングを実行します。 オプション options --template-file … template.yamlを指定 --s3-bucket … パッケージのアップロード先(※Lambda関数のデプロイではない) --output-template-file … デプロイ用のテンプレートファイル 実行 sam package $ sam pac

【AWS】SAM-CLIでサーバーレスアプリケーション① - プロジェクトの作成とローカルでテスト実行 -

AWSでサーバーレスアプリケーション(SAMアプリケーション)を開発する際の手順をまとめます。 はじめに サーバーレスアプリケーションとは バックグラウンドで処理をするアプリケーション(いわゆるLambda関数) SAM-CLIとは AWSの提供するクライアント用SAMコマンド(Serverless Application Model - Client) ローカルでサーバーレスアプリケーションの作成やAWSへのデプロイができる また、Dockerと組み合わせればローカルでのテスト実行が可能 公式の詳細は以下 https://aws.amazon.com/jp/serverless/sam/ この記事ではSAM-CLIを使ってLambda関数をローカルで実行する手順を紹介します。 実装 プロジェクト作成 sam init $ sam init 以下のような構成でファイルが作られる。 sam-app/ ├── README.MD ├── event.json ├── hello-world │ └── app.js │ └── package.json │ └── tests │ └── unit │ └── test-handler.js ├── template.yaml ※もちろんオプションによりプロジェクトの細かい設定が可能です。 ※デフォルトで言語はnode.jsが選択されます。(この記事でもnode.jsを使用) 言語の選択 --runtime --runtime [識別子] で言語を選択可能、以下の識別子が利用できます。 名前(言語) → 識別子 Node.js 10(Node.js) → nodejs10.x Node.js 8.10(Node.js) → nodejs8.10 Python 3.6(Python) → python3.6 Python 3.7(Python) → python3.7 Python 2.7(Python) → python2.7 Ruby 2.5(Ruby) → ruby2.5 Java 8(Java) → java8 Go 1.x(Go) → go1.x .NET Core 2.1(C#) → dotnetc

【Bootstrap4】初期設定と簡単な例

イメージ
Bootstrapを導入して表示デバイスあった画面構成をする方法をまとめました。 ここでは導入から初期設定までの手順、それから簡単なサンプルまでを作成してみます。 なお、公式ページは以下のリンクになります。サンプルが豊富に用意されているのでとても参考になります。 https://getbootstrap.jp/ 事前準備 ライブラリの配置 以下手順でBootstrapライブラリを配置します。 以下のサイトのDownload https://getbootstrap.com/ ダウンロードページの「Compiled CSS and JS」をダウンロードする zipファイルを解凍したらjs、cssのディレクトリをプロジェクトのpublicディレクトリの任意の場所へ配置する (今回はpublic/bootstrap/ 以下に配置) ヘッダー定義 Bootstrapを適用する画面のheaderタグ内に以下を記載します。 <!-- Viewportの指定 --> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Bootstrapのcss, js読み込み --> <link href="/bootstrap/css/style.css" rel="stylesheet" type="text/css"></link> <link href="/bootstrap/css/bootstrap.min.css" rel="stylesheet"></link> <script src="/bootstrap/js/bootstrap.min.js"></script> metaタグのviewportはPC、スマホ、タブレットなど異なるデバイスでも、デバイス自体の横幅に合わせてコンテンツを合わせて表示しますよ、という設定です。 linkとscriptは配置したライブラリを読

【PHP】FuelPHPでファイルアップロード

FuelPHPでファイルをアップロードする方法をまとめます。 以下の公式ページを参考に実装しました。 http://fuelphp.jp/docs/1.8/classes/upload/usage.html 要件 inputタグで指定されたファイルをアップロードする ファイル名はハッシュ値に置き換える ファイルの最大サイズは1MB ファイル拡張子はjpeg, jpg, gif, pngのみ許可 エラーは発生した時点で例外とする 実装 フロント側 Submit form内に以下を追加します。 <input type="file" name="image" accept="image/*" /> サーバー側実装 モジュール定義 FuelPHPのコアライブラリを使用するので以下を追加します。 use \Fuel\Core\Upload; アクションの実装 // アップロードファイルの設定 Upload::process(array( 'path' => '/var/tmp', 'overwrite' => true, 'randomize' => true, 'max_size' => 1000000, 'ext_whitelist' => array( 'jpeg', 'jpg', 'gif', 'png' ) )); // アップロードファイルの検証と保存 if (Upload::is_valid()) { // 画像アップロード成功の場合、設定を元に保存 for($i = 0; $i < count(Upload::get_files()); $i++) { Upload::save($i); } } // ファイルアップロードエラー fo

【PHP】Gmail認証 - ログインと認証チェック -

イメージ
Gmailを使ってGoogle認証APIでログインを実装する方法、またログイン後の認証チェックを実装してみます。 前提としてGoogle APIsコンソール(以下URL)からサービスキーを発行します。 https://console.developers.google.com/apis/dashboard ※なお今回FuelPHPを使って実装していますが、フレームワークの特別な機能は特に使用していません。 事前準備 サービスキー発行 Google APIsコンソールへサインイン https://console.developers.google.com/?hl=JA Google APIsコンソールの左側メニュー → 認証情報 → 認証情報を作成 → OAuth クライアント ID 必要項目を入力 名前 任意のアプリケーション名を入力 承認済みの JavaScript 生成元 今回は使用しません 承認済みのリダイレクト URI 認証後にGoogleからコールバックされるエンドポイント 保存ボタンで client_id と client_secret が発行される ※OAuth同意画面でアプリケーションのスコープを指定することができます。これを内部にすると、組織内のGmailアカウントに限定されるので、社内システムなどの開発で使用する際はではチェックすると良いです。 ログイン処理 Google Api Key設定ファイル fuel/app/config/test/apikeys.php 事前準備で発行したclient_idとclient_secretを設定ファイルへ定義します。 <?php /** * Google API Keys */ return array( 'client_id' => '00000000-xxxxxxxx.apps.googleusercontent.com',