サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
WWDC25
blog.chatlune.jp
アプリを作成していると、オブジェクトの名前やデータの送信先アドレスなど、コード上で文字列を使う機会があると思います。 今回はそれらの文字列をリソースファイルで一元管理し、作業量と記述ミスを減らす方法を紹介します。 リソースファイルの用意 使う文字列はリソースファイルであるstrings.xmlに記述します。 strings.xmlは以下の場所にあります。 /app/src/main/res/values/strings.xml ここに次のように記述します。 <string name="リソースID">呼び出す文字列</string> stringタグで囲った文字が呼び出す文字列です。 nameは文字列を呼び出す際のリソースIDとして使われます。 今回は以下の内容を記述しました。 4〜11行の内容が追記したものです。 Javaのコードから呼ぶ Javaのコードから呼ぶ場合は、下記のように、g
今回はEC-CUBE3のプラグインでテーブルを作成していく手順の紹介になります。 EC-CUBE3では、エンティティを通じてデータの取得や更新などのテーブル操作を行います。 まず、テーブルとエンティティをマッピングするた...
EC-CUBE3でプラグインを使う場合、ファイルやフォルダの作成が手間となっていました。 EC-CUBE3.0.13からは、プラグインの雛形をコンソールコマンドで簡単に生成できるプラグインジェネレーターが搭載されたので、今回はその使い方を紹介します。 作業環境は下記の通りです。 EC-CUBE(3.0.16) プラグインの作成 プラグインの雛形を作成するためには、下記のコマンドを実行します。 $ cd EC-CUBE3インストールディレクトリ $ php app/console plugin:develop generate コマンドを実行すると、いくつかの質問を訊かれるので、順番に答えて行きます。 [+]Please enter Plugin Name Input[1] : プラグイン作成テスト [+]Please enter Plugin Code (First letter is u
EC-CUBE3でテーブルにカラムを追加(編集)する場合、公式の方法として下記のように行います。 エンティティ、リポジトリ | EC-CUBE 開発ドキュメント 既存テーブルに対する拡張 基本的に既存テーブルに対してプラグインからカラムを追加するような拡張は推奨していません。 既存テーブルに対して、例えばdtb_customerテーブルにニックネームを追加したい時は、プラグイン側でplg_profileというようなテーブルを作成して関連付けをします。 プラグインを使って既存のテーブルに拡張をする場合、カラム追加する上でテーブルも増えてしまいます。 そうすると、拡張するテーブルが増えると処理の実装で見なければいけないテーブルの数も増え、複雑になってしまいます。 その複雑化を避け、実装を行いやすくするために、今回プラグインを使わず直接テーブルにカラムを追加していく方法を紹介します。� 作業環境
今回はCSVファイルをMySQLデータベースにインポートする方法を紹介します。 CSVファイルの内容をMySQLデータベースにインポートするには、LOAD DATA INFILE構文を使います。 インポート先のテーブルを作成 1.以下のSQLを実行し、データベースを作成する。 CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4; 2.以下のSQLを実行し、先程作成したデータベースに接続する。 use testdb; 3.以下のSQLを実行し、テーブルを作成する。 CREATE TABLE goods( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, price int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=Inno
CakePHPの基本的なURLの構造は以下のようになります。 http://xxxxxx/コントローラー名/アクション名 今回はこの「コントローラ名/アクション名」の部分を変更したい時のやり方を紹介していきます。 ルーティングとは ルーティングを設定することで、URLとコントローラーのアクションをマッピングをすることができます。 デフォルトの状態だと、URLは「/コントローラー名/アクション名」となります。例えば、Aritclesコントローラーのviewアクションを実行したいときのURLは「articles/view」になります。 簡単な設定 ルーティングの設定は「config/routes.php」に記載されています。 Router::scope('/', function (RouteBuilder $routes) { $routes->connect('/', ['controll
CakePHPでは、ログの出力先として「error.log」と「debug.log」が、デフォルトで用意されています。今回は、それとは別のファイルにログを残すやり方を紹介していきます(CakePHP v.3.4.4)。 ログの設定の確認 config/app.phpにロガーの定義が記載されています。 【app.php】 'Log' => [ 'debug' => [ 'className' => 'Cake\Log\Engine\FileLog', 'path' => LOGS, 'file' => 'debug', 'levels' => ['notice', 'info', 'debug'], ], 'error' => [ 'className' => 'Cake\Log\Engine\FileLog', 'path' => LOGS, 'file' => 'error', 'lev
今回はMySQLデータベースからCSVを出力する方法を紹介します。 MySQLからCSVファイルを出力するにはSELECT INTO 構文でOUTFILEを使う必要があります。 データベースの準備 1.以下のSQLを実行し、データベースを作成する。 CREATE DATABASE comma; 2.以下のSQLを実行し、先程作成したデータベースに接続する。 USE comma 3.以下のSQLを実行し、テーブルを作成する。 CREATE TABLE goods( id int(11) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, price int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 4.テーブルが問題なく作成されているか確認す
パスワードの入力を求めるフォームには、確認用パスワードの入力も付きものだったりします。その際に、2つの入力内容が一致しているかどうかをバリデーションで確認する実装を紹介したいと思います。 バリデーションの記述 パスワードに対して以下のバリデーションをセットします。 【Model/Table/UsersTable.php】 public function validationDefault(Validator $validator) { $validator ->notEmpty('username', 'ユーザ名は省略出来ません。'); $validator ->notEmpty('password', 'パスワードは省略出来ません。') ->allowEmpty('password','update') ->add('password',[ //←バリデーション対象カラム 'comWit
今回はCakePHPでデータベースにデータを新規に保存する方法について紹介します。 データベースにデータを保存するにはエンティティが必要です。 作業環境は下記の通りです。 CakePHP(v3.4.4) PHP(7.0.8) サンプルコード 紹介の前に、今回の内容を実装したコードとその動作に必要なテーブルを作成するSQL文を記載します。これから説明する内容はこのコードをベースにしています。 保存先のテーブル作成 CREATE TABLE users ( id int(11) PRIMARY KEY AUTO_INCREMENT, name varchar(50) NOT NULL, nickname varchar(50) NOT NULL ); コード【Controller/UsersController.php】 use Cake\ORM\TableRegistry; public f
ビューのある一部分を、他のビューにも使いまわしたいことがあると思います。今回は、そんな時に使うと便利なエレメントについて紹介していきます。(CakePHP v.3.4.4) エレメントとは、繰り返し使うビューの要素を個別のファイルに収めたものです。その要素を使いたい時にビュー側で呼び出してあげれば、いつでも使用することができます。 その結果以下のメリットがあります。 ビューのテンプレートファイルのコードが短くなり、すっきりします。 修正が楽になります。共通化しているのでエレメントだけ修正すればOK。 エレメントの作成 「src/Template/Element」の配下にファイルを作成します。 ファイル名は「(エレメント名).ctp」 作成したファイルの中身は、ビューファイルの中で共通化したい部分をそのまま書きます。 ここでは「navi.ctp」ファイルを作成します。 【navi.ctp】
1ページあたりに表示されるレコードの件数を制御したいという状況はよくあると思います。 今回はページネーションを使用して、取得したレコードをページ分けするやり方を紹介したいと思います。 シンプルに1ページあたりの件数と、表示順の設定だけをしていきます。 データの準備 以下のテーブルを用意して、適当にデータを入れてきます。 CREATE TABLE `articles` ( `id` int(11) NOT NULL, `title` varchar(50) NOT NULL, `body` text, `created` datetime NOT NULL, `modified` datetime NOT NULL, `delete_flg` int(11) NOT NULL DEFAULT '0' COMMENT '0:未削除,1:削除' ) ENGINE=InnoDB DEFAULT C
ノベルゲームのセーブ画面のUIなど、ゲームの画面を画像素材として使用したい時があります。 Unityのゲーム中にスクリーンショットを作成し、必要であればファイルに出力をし、 ゲームオブジェクトとして使用する例をご紹介します。 作業環境 MacBook Air macOS Sierra 10.12.6 Unity 5.5.4p5 スクリーンショットの撮影 今回のサンプルではボタンを2つ用意し、 それぞれ撮影ボタンと表示ボタンとして使用します。 新しくスクリプトを作成し、コードは以下のようにします。 スクリプトの作成を終えたら、空のゲームオブジェクトを作成し、 先ほどのスクリプトをアタッチします。 撮影用ボタンを作成します。 UI>Buttonからボタンを作成し、OnClick()に 先ほどのスクリプトのClickShootButton()を設定します。 撮影用ボタンを押すことでスクリーンショ
データ移行の手順書を作成している時、移行データが入ったcsvファイルをデータベースにインポートしていました。その際にALTER TABLEを使用した為今回はALTER TABLEを使う際の注意点を紹介します。 使用データベース:MySQL 作成したばかりのデータベースの設定がしたい 今回は移行前のデータベースから抽出したcsvファイルを移行先のデータベースに入るように直した上で移行しようとしていました。 しかし問題が1つあり、移行前のデータベースと新しいデータベースではカラムの数や順番が異なっています。そこで一旦、移行前のデータベースに則った仮のデータベースを作成し、そこにインポートする事にしました。 その後、仮のデータベースを新しいデータベースに則った形に作り変えた上でcsvファイルを出力し、新しいデータベースにインポートします。 その仮のデータベースの設定をする際にALTER TABL
Canvasでチャートを作成していた時に、背景やらグラフの帯やらで角丸四角をたくさん描画する必要があったので、共通化して1つの関数にまとめましたので紹介していきます。 サンプル 作ろうとしているものがこちらになります。 「サイズ」「色」等のパラメータを変更すると、角丸四角が生成されるので試してみてください。 これより、このサンプルの実装方法について紹介していきます。 各種ファイルを準備 以下のようにファイルを準備します。 ┣ index.html ┗ js ┗ main.js index.htmlの記述 index.htmlは以下のように記述しておきます。 【index.html】 <html> <head> <meta charset="utf-8"> <script src="js/main.js"></script> </head> <body> <div> <canvas id="
シェルの準備 テスト用のシェルを作成し、src/Shell/に格納します。 【HelloLogShell.php】 namespace App\Shell; use Cake\Console\Shell; use Cake\Log\Log; class HelloLogShell extends Shell { public function main() { LOG::info('Hello World','hello'); } } 今回のシェルは、ファイル「logs/hello.log」に「Hello World」のログを残す処理です。 指定のログファイルにログを残す為には他にも設定が必要ですが、今回のお話のメインとはずれますので、そちらの説明は割愛しますが、参考にしたサイトを紹介します。 crontabコマンド 以下のコマンドで、cronを設定するエディタを起動します。 cronta
CakePHPで開発を始めたばかりの頃は、命名規約をあまり気にせずに関数やctpファイルを量産しておりましたが、そのせいで「Missing Template」エラーと出会ったので、対処した時のお話をします。 (CakePHP v3.4.4) 「Missing Template」エラー時の状況 エラーが出た時に作成した関数は「viewAll()」、対応するテンプレートファイル名は「viewAll.ctp」でした。キャメル記法で命名しました。 エラー画面は以下です。 いや、確かに関数名とビューのテンプレートファイル名を同じ名前にしているぞ!と思いながらエラー内容をよく見てみました。 なんか「view_all.ctp」をちゃんと作ったか確認して!と言われているようです。 ビューのテンプレートのファイル名 CakePHP Cookbookによると ビューのテンプレートファイルは、それを表示するコン
はじめに 掲示板やブログ等でよくある名前欄やコメント欄で入力可能文字数を制限する時、文字数の判定の為に文字数を取得しなければならない場面があります。 今回はPHPで文字数を取得し、入力可能文字数を制限してみます。 作業環境 PHP(7.0.0) strlen関数は文字列の長さを取得しても文字数を返すわけではない 以前strlen関数を別の入力欄の文字数を制限する為に使ったことがあり、同じ要領でできると思い、特に何も考えずにそのまま使ってみたものの上手くいきませんでした。 調べてみると、strlen関数は文字列の長さを取得しますが、返すのは文字数ではなく、バイト数でした。 文字数を返すのは何か 調べを進めていくと、mb_strlenという関数に辿り着きました。 これは文字列の長さを取得し、文字数を返すのですが、1文字が2バイト以上であるマルチバイト文字は1文字として返します。これにより、全角
順調に開発が進んでいたのに、ある日急にスクリプトが動かなくなったり、 GameObjectにアタッチしたスクリプトのinspectorを確認したら、 勝手にDisableになっていた。 そんな経験ありませんか? 私が踏んだのは、NullReferenceExceptionが原因でした。 NullReferenceExceptionって? 公式のマニュアルはこちら。 まずは、意図的にNullReferenceExceptionを起こしてみましょう。 例えば、適当にスクリプトを作成し、空のGameObjectにアタッチしておきます。 スクリプトには、publicでButton型の変数を定義しておきます。 public Button button; そして、Start関数の中で先ほどのbuttonのtextを変えようとします。 void Start(){ button.GetComponentI
管理画面で記事をデータベースに保存して、フロントサイドで記事を閲覧できるサイトを構築していました。 フロントサイドでwebサイトにアクセスした時に、記事の一覧を表示するために必要なデータをキャッシュに保存して、ページ遷移時にそのデータを使用して表示させておりました。 (一覧を表示するために必要なデータが、仕様の関係で少し重いクエリを発行しなければならないため、最新の情報をキャッシュに保存しておくという手法を取りました。) (CakePHP v3.4.4) afterSave/afterDeleteイベントでキャッシュを削除させたい やりたかったことは、管理画面で記事の登録、更新、削除をした時に、それまでのキャッシュを一旦クリアして、フロントサイドで再度データを生成し、キャッシュに保存し直すように実装することです。 今回は、afterDeleteとafterSaveを組み込んだBehavio
フォームに入力された内容を新規マスタとして登録する機能を実装しようとしていました。 フォームに入力後、確認画面に行く前にチェックを行い、すでにデータベースに登録済みのデータならばエラー表示を出したかった。 保存時のsaveメソッドで行われるbuildRulesのバリデーションでも重複チェックはできますが、入力内容確認のバリデーション時に一緒に行いたいということもあり、TableクラスのvalidationDefaultで重複チェックをさせたかったのです。 しかし、CakePHP3のvalidationDefaultで重複チェックを行うための情報を、ググってもなかなか見つけることができなかったので時間がかかりました。 (CakePHP v3.4.4) validationDefaultでの重複チェック記述法 「url」のカラムに対して重複チェックをしています。 【GroupsTable.ph
「ScrollView」でリストを作った時に、リストの先頭に説明を追加したり、 最後の要素の後ろに終了を示す文言等を付けたい事があります。 しかし、自動レイアウトが働いていると、それらの文言も整列されてしまい、 リスト内の1つの要素として認識されてしまいます。 今回は、動的に要素の増えるリストで、HeaderやFooterのような要素を 任意の位置に配置する方法をご紹介します。 作業環境 MacBook Air macOS Sierra 10.12.6 Unity 5.5.4p5 ScrollViewの作成 ScrollViewを配置します。 ScrollViewのContentには、 Vertical Layout Group Content Size Fitter の、コンポーネントを追加しておきます。 VerticalLayoutGroupの設定 Paddingの中の、LeftとTo
CakePHPでユーザ情報をデータベースに登録する機能を実装した時の話です (CakePHP v3.4.4)。 誕生日を入力するフォームで、入力された日付に対して以下のチェックを行い、入力エラーがある場合はエラー表示をさせること。 2月31日や4月31日など、存在しない日付が入力されていないか 未来の日付が入力されていないか TableクラスのvalidationDefaultでチェックをさせたい。 しかし、実装してみたところ、片方のバリデーション(後に定義したルール)しか効いていませんでした。 試しにバリデーションの記述の順番を逆にしてみると、同じく片方のバリデーション(後に定義したルール)しか効かない。後に定義したルールしか適応されないのかもしれないと思い込み、つまずきました。 実際に記述したバリデーション(修正前) birthdayの入力データ($value)は「1982-06-18
Unityでリストの様な物を作る際「ScrollView」を使いますが、大抵の場合、リストの要素は動的に増えていきます。 始めから要素数の決まっているタイプのリストなら良いのですが、そうではない場合は一工夫必要です。 今回は、動的に要素の増えるリストを、ScrollViewを使って実装する方法をご紹介します。 また、ScrollViewには模様付きの背景画像があり、スクロール時に一緒にスクロールして貰おうと思います。 作業環境 MacBook Air macOS Sierra 10.12.6 Unity 5.5.4p5 画像素材の準備 空想曲線様より。 メッセージ枠を使わせていただいております。 とりあえずインポートしてUIで使えるように設定を変更。 設定が終わったら「Sprite Editor」ボタンを押します。 この様に調整しておきます。 UIが元画像より大きくなった時に、描画をループ
このページを最初にブックマークしてみませんか?
『blog.chatlune.jp』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く