Run MVP sample app on the Android emulator
はじめに
2021年1月にAndroidアプリを開発する予定ができました。
何も知らない状態から20日で何が開発できるのか見当もつきませんが
まずはMVPアーキテクチャを学ぶことにしました。
MVPを選択した理由はMVCと似ていて分かりやすかったためです。
eh-career.com
MVPのサンプルをエミュレータで実行しようとしたのですが
一筋縄にはいかなかったため実行にあたり操作した内容をまとめます。
Download MVP sample app
リポジトリからソースコードをダウンロードします。
github.com
Android emulator HYPERVISOR_ERROR
エミュレータを実行すると HYPERVISOR_ERROR が発生する場合の対策です。
詳細な内容は以下を参照してください。
qiita.com
Qiitaを参考に私が実際に操作した内容になります。
プログラムと機能の削除 -> Windwosの機能の有効化または無効化
Hyper-V と Windowsハイパーバイザープラットフォーム のチェックを外します。
[OK]ボタンを押した後、変更を適用させるためにWindowsを必ず再起動します。
Android Studio を起動するとエミュレータの設定画面が表示されました。
メモリサイズは規定値の4GBを選択して次へ進みました。
インストール後のログにエラーが無いことを確認して完了です。
Encryption unsuccessful
エミュレータを実行すると Encryption unsuccessful になる場合の対策です。
tratail の回答が参考になりました。
teratail.com
使用するエミュレータで Wipe Data を実行します。
Run MVP sample app
MVPのサンプルを実行することが出来ました。
EC2 Ubuntu に Windows Subsystem for Linux (WSL1) からSSH接続する
はじめに
年末年始の休みを活用して改めてサーバ構築の勉強をしたいと思い
Ubuntu に Windows から SSH 接続できるようにしたので書き残します。
Ubuntu は EC2 に作成をしました。
SSH接続
調べてみると Windows から SSH 接続は簡単に出来るようです。
・Traterm
eng-entrance.com
・SSHクライアント
dev.classmethod.jp
・Windows Subsystem for Linux
www.atmarkit.co.jp
今回は Windows で Ubuntu が使える機能 Windows Subsystem for Linux (WSL1) をインストールして SSH 接続に使用することにしました。
WSLがあれば毎回 SSH 接続をしなくてもローカルでコマンドの確認が行えます。
Ubuntu EC2 インスタンスの作成
キーペアの作成までこちらのサイトが参考になりました。
www.acrovision.jp
Setup DB First EntityFrameworkCore SQL Server
はじめに
.Net Core で EntityFramework を使う際に .NET Standard と違って試行錯誤したのでDBファーストで使用した手順をまとめます。
対象のフレームワーク
今回は.NET Core 3.1を使用しました。
開発者用 PowerShell
コマンドは全て開発者用PowerShellから実行します。
カレントディレクトリはプロジェクトルートです。
PS C:\develop\WebApplication1\WebApplication1> dir ディレクトリ: C:\develop\WebApplication1\WebApplication1 Mode LastWriteTime Length Name ---- ------------- ------ ---- d----- 2020/12/20 17:30 bin d----- 2020/12/20 17:30 obj d----- 2020/12/20 17:29 Properties -a---- 2020/12/20 17:29 162 appsettings.Development.json -a---- 2020/12/20 17:29 192 appsettings.json -a---- 2020/12/20 17:30 723 Program.cs -a---- 2020/12/20 17:30 1295 Startup.cs -a---- 2020/12/20 17:29 148 WebApplication1.csproj
dotnet ef ツールのインストール
.NET Core 3.0 以降は .NET SDK に dotnet ef ツールが含まれていないため
初めて使用する場合はインストールが必要です。
dotnet tool update --global dotnet-ef
Microsoft.EntityFrameworkCore.Design の追加
スキャフォールディングに必要な Design パッケージを追加します。
dotnet add package Microsoft.EntityFrameworkCore.Design
dotnet add package Microsoft.EntityFrameworkCore.SqlServer の追加
スキャフォールディングに必要なデータベースプロバイダーを追加します。
dotnet add package Microsoft.EntityFrameworkCore.SqlServer
Models フォルダの作成
コードを保存する Models フォルダを作成します。
スキャフォールディング
データベースから DBContext と Entity のコードを Models フォルダに作成します。
dotnet ef dbcontext scaffold "Server=[ホスト名];Database=[データベース名];persist security info=True;user id=[ユーザーID];password=[パスワード];MultipleActiveResultSets=True" Microsoft.EntityFrameworkCore.SqlServer -o Models
確認
EntityFrameworkCoreを使用してデータベースからコードが作成できました。
参考資料
Setup DB First EntityFramework SQLite
はじめに
SQLiteでEntityFrameworkのDBファーストを試してみました。
EntityFramework6 用の SQLiteToolBox DDEXプロバイダーを使用します。
ソリューションファイルの作成
サンプルとして Windows Form アプリケーションを作成しました。
1. SQLite Compact Toolbox のインストール
拡張機能の管理から SQLite/SQL Server Compact Toolbox をインストールします。
2. GAC に SQLite をインストール
sqlite-netFx46-setup-bundle-x86-2015-1.0.113.0.exe をダウンロードします。
デザイナコンポーネントは64bit版には含まれていないため32bit版を使用します。
GACにインストール、デザイナコンポーネントのインストールを選択します。
ちなみに64bit版のSetupだとデザイナーコンポーネントの選択がありません。
GACに登録されている事をToolboxから確認します。
3. System.Data.SQLite NuGet パッケージのインストール
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.configの
DbProviderFactories タグからバージョン番号を確認します。
上記で確認したバージョン番号と同じ NuGet パッケージをインストールします。
NuGet Gallery | System.Data.SQLite 1.0.113.6
インストール後の packages.config
<?xml version="1.0" encoding="utf-8"?> <packages> <package id="EntityFramework" version="6.3.0" targetFramework="net48" /> <package id="Stub.System.Data.SQLite.Core.NetFramework" version="1.0.113.3" targetFramework="net48" /> <package id="System.Data.SQLite" version="1.0.113.0" targetFramework="net48" /> <package id="System.Data.SQLite.Core" version="1.0.113.6" targetFramework="net48" /> <package id="System.Data.SQLite.EF6" version="1.0.113.0" targetFramework="net48" /> <package id="System.Data.SQLite.Linq" version="1.0.113.0" targetFramework="net48" /> </packages>
インストール後の App.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /> </startup> <entityFramework> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite.EF6" /> <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> <remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories> </system.data> </configuration>
今回のApp.configには設定が不足している為 providers タグに設定を追加します。
変更後の App.config
<?xml version="1.0" encoding="utf-8"?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> </configSections> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" /> </startup> <entityFramework> <providers> <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> <provider invariantName="System.Data.SQLite.EF6" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> <provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" /> </providers> </entityFramework> <system.data> <DbProviderFactories> <remove invariant="System.Data.SQLite.EF6" /> <add name="SQLite Data Provider (Entity Framework 6)" invariant="System.Data.SQLite.EF6" description=".NET Framework Data Provider for SQLite (Entity Framework 6)" type="System.Data.SQLite.EF6.SQLiteProviderFactory, System.Data.SQLite.EF6" /> <remove invariant="System.Data.SQLite" /><add name="SQLite Data Provider" invariant="System.Data.SQLite" description=".NET Framework Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" /></DbProviderFactories> </system.data> <connectionStrings><add name="EmployeeDBContext" connectionString="data source=C:\Users\q612.TOHNICHI\source\repos\SQLiteEFSample\Employee.db" providerName="System.Data.SQLite.EF6" /></connectionStrings></configuration>
4. DBファーストの使用
DBファースト用に department テーブルを作成します。
DBの作成には DB Browser for SQLite を使用しました。
Downloads - DB Browser for SQLite
ADO.NET Entity Data Model を作成します。
データベースから Code First を選択します。
SQLite Provider (Simple for EF6 by ErikEJ) を使用します。
Data Source にDBのファイルパスを指定します。
テーブルを指定します。
Department と DBContext が作成されました。
全件検索した結果を一覧表示します。
using System; using System.Linq; using System.Windows.Forms; namespace SQLiteEFSample { using Model; public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { using (EmployeeDBContext context = new EmployeeDBContext()) { DataGridView.DataSource = context.Department.AsNoTracking().ToList(); } } } }
無事 department テーブルの一覧を表示する事ができました。
[:300]
補足 App.config の修正を行わなかった場合の動作
不足していた System.Data.SQLite を追加せず実行した場合の動作です。
<provider invariantName="System.Data.SQLite" type="System.Data.SQLite.EF6.SQLiteProviderServices, System.Data.SQLite.EF6" />
SQLの発行を行う際に InvalidOperationException が発生します。
System.InvalidOperationException: 'No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SQLite'. Make sure the provider is registered in the 'entityFramework' section of the application config file. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.'
Setup DB First JetEntityFrameworkProvider in VS2019
はじめに
Access で EntityFramework を使える JetEntityFrameworkProvider を試しました。
github.com
コードファーストは簡単に使えたのですが、DBファーストでは使えるまでに幾つかの設定が必要だったので忘れる前にまとめます。
- はじめに
- 準備① JetEntityFrameworkProvider
- 準備② レジストリのバックアップ
- 準備③ レジストリキー作成
- 1. Visual Studio を管理者として実行
- 2. install.cmd 編集
- 3. プロジェクトのコンパイル
- 3-1. JetDdexProvider ビルドイベント編集
- 3-3. JetEntityFrameworkProvider ビルドイベント編集
- 3-4. JetDdexProvider, JetEntityFrameworkProvider リビルド
- 3-5. VisualStudio2019 プライベートハイブ読み込み
- 3-6. レジストリ DataProviders, DataSources エクスポート
- 3-7. レジストリ DataProviders, DataSources 編集
- 3-8. レジストリ DataProviders, DataSources インポート
- 3-9. VisualStudio2019 プライベートハイブアンロード
- 4. machine.config に JetEntityFrameworkProvider 追加
- DB First 確認
- 参考資料
準備② レジストリのバックアップ
今回は VisualStudio のレジストリをエクスポートしました。
必要に応じて他のレジストリもエクスポートしておくと安心です。
regedit を実行。
VisualStudio を選択。
コンピューター\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio
エクスポートで保存。
準備③ レジストリキー作成
レジストリエディタからVisualStudioにキーを新規作成します。
コンピューター\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\
自由に名前を付けて良いのですが今回は OMGITWORKS で作成。
3. プロジェクトのコンパイル
コンパイルするためにビルドイベントの内容を編集します。
使用しているVisualStudioのバージョンによってパスが変わるため
環境に合わせてパスを変えて、コンパイルできるようにします。
3-1. JetDdexProvider ビルドイベント編集
JetDdexProvider のプロパティからビルドイベントを編集。
① ビルド前イベントのコマンドライン
call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat" "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /u JetEntityFrameworkProvider.dll
赤下線はVisualStudioのバージョンごとに変わるので確認して変更します。
② ビルド後イベントのコマンドライン
"$(ProjectDir)Install.cmd" /ranu /codebase "$(TargetDir)$(TargetFileName)" call "C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat" "C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /i "$(TargetDir)JetEntityFrameworkProvider.dll" /f
赤下線はVisualStudioのバージョンごとに変わるので確認して変更します。
3-3. JetEntityFrameworkProvider ビルドイベント編集
JetEntityFrameworkProvider のプロパティからビルドイベントを編集。
① ビルド前イベントのコマンドライン
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /u "$(TargetName)"
赤下線はVisualStudioのバージョンごとに変わるので確認して変更します。
② ビルド後イベントのコマンドライン
"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.7.2 Tools\gacutil.exe" /if "$(TargetPath)"
赤下線はVisualStudioのバージョンごとに変わるのでパスを確認して変更します。
3-4. JetDdexProvider, JetEntityFrameworkProvider リビルド
JetDdexProvider
JetEntityFrameworkProvider
正常終了し、出力にエラーメッセージが無ければ成功です。
レジストリエディタからDataProviders, DataSourcesが作成されている事を確認します。
コンピューター\HKEY_CURRENT_USER\Software\Microsoft\VisualStudio\OMGITWORKS
3-5. VisualStudio2019 プライベートハイブ読み込み
レジストリでは、各種の情報がキー、サブキー、値と階層的に管理されている。
ハイブは、ハードウェア設定やソフトウェア設定、セキュリティ設定など、レジストリに保存される情報のうち、特定分野に関する一連の情報を識別するセクションを意味する。
Insider's Computer Dictionary:ハイブ とは? - @IT
プライベートハイブの編集方法については以下の記事が参考になりました。
Fortunately, you can use regedit.exe to load a private hive. You need to select the HKEY_USERS node, and click the File > Load Hive… menu. You select the privateregistry.bin file, give a name to the hive (I entered “VS2017PrivateRegistry”) and now you can see the 15.0
_Config key populated as usual (note: use File > Unload Hive when done):
VisualStudioのレジストリにJetEntityFrameworkProviderを登録するのですが、2017からプライベートハイブに変わってしまいコンパイルだけで登録出来ないため、手作業で行います。
まずはVisualStudioのレジストリ(プライベートハイブ)を確認。
~\AppData\Local\Microsoft\VisualStudio\
プライベートハイブのフォルダ名 16.0 はVisualStudioのバージョンです。
利用している開発環境のバージョンと一致するフォルダを探してください。
プライベートハイブを編集する前に起動しているVisualStudioを全て終了します。
起動していると以下の警告メッセージが表示されて編集ができません。
レジストリエディタにて HKEY_USER を選択。
レジストリエディタのハイブの読み込みから privateregistry.bin を指定。
キー名を付ける必要があるので分かりやすい名前を付けます。
これによりVisualStudioのプライベートハイブが編集できるようになります。
3-6. レジストリ DataProviders, DataSources エクスポート
DataProviders, DataSoures それぞれエクスポートします。
ドキュメントフォルダにregというフォルダを作成してエクスポートしました。
3-7. レジストリ DataProviders, DataSources 編集
エクスポートした DataProviders, DataSources を編集します。
間違えても良いように _new としてコピーしたものを編集します。
regファイルを右クリックして、今回はメモ帳で編集しました。
OMGITWORKSのパスを全て、プライベートハイブのパスに変更します。
・変更前
・変更後
3-8. レジストリ DataProviders, DataSources インポート
パスをプライベートハイブに変更した DataProviders, DataSources をレジストリエディタでインポートします。DataProviders, DataSourcesがある_Config が付くレジストリキーにインポートします。
DataProviders を選択します。
インポートから先ほど編集した DataProviders_new.reg を開きます。
完了するとDataProvidersにJetDDEXProviderが追加されます。
DataProviders と同様に DataSources もインポートします。
3-9. VisualStudio2019 プライベートハイブアンロード
読み込んでいたプライベートハイブを選択します。
アンロードを左クリック。
警告メッセージが表示されます。
はいボタンを押してレジストリキーのアンロードを実行します。
4. machine.config に JetEntityFrameworkProvider 追加
machine.config をデスクトップにコピーして編集をします。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
DbProviderFactories に JetEntityFrameworkProvider を追加します。
元の場所にmachine.configを上書きをします。
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Config\machine.config
DB First 確認
Accessでデータベースを作成します。
NuGet から JetEntityFrameworkProvider をインストールします。
ADO.NET Entity Data Model からDbContextの名称を入力して追加します。
データベースから Code First を選択して次へ。
新しい接続を左クリックします。
データソースを変更します。
<その他>からJet DDEX provider for JetEntityFrameworkProviderを選択します。
DataSource と Provider を入力します。
接続文字列が作成されます。
モデルを作成するテーブルを選択します。
Employee、SampleContext が作成できました。
GitHub の利用
目次
はじめに
UdemyのGit講座で覚えきれなかった内容を復習します。
knkomko.hatenablog.com
1.リモートリポジトリを追加
git remote add [リモート名]
GitHub上で新規作成したリモートリポジトリをbakの名称で登録する
リモートの情報を確認するとbakの名称でリポジトリの登録が確認できる
2. リモートリポジトリの情報を取得
git fetch [リモート名]
リモートリポジトリの更新された内容を取得する
リモートリポジトリから取得した情報がローカルリポジトリに保存される
remotes/ : リモートリポジトリから取得した情報が保存される場所
ワークツリーにローカルリポジトリの内容を反映する
5. ブランチの新規作成
git branch [ブランチ名]
既存のブランチを確認する
ブランチを新規作成する
作成したブランチを確認する
6. ブランチを切り替える
git checkout [既存ブランチ名]
masterからfutureブランチに切り替える
現在HEADが指し示すブランチを確認する
7. 変更履歴をマージする
git merge [ブランチ名]
①Fast Foward
現在のブランチより新しいブランチを参照する (親ブランチは1つ)
リモートリポジトリにてindex.htmlを変更した内容をワークツリーに取り込む
pull : fetch と merge を順番に実行する
リモートリポジトリにて変更した最新のブランチが参照されている
②Auto Merge
複数のブランチから新しいブランチを作成して参照する (親ブランチは2つ)
fuatureブランチにてindex.htmlを変更した内容をmasterに取り込む
fuatureブランチの変更がmasterブランチに取り込まれている
8. コンフリクトを解決する
複数のブランチが同じファイルの同じ行に変更を行うとコンフリクトが発生する
コンフリクトが発生したファイルを確認する
コンフリクトが発生している行を確認する
コンフリクトが発生した行を編集してファイルを保存する
コンフリクトを解消したファイルをコミットする
コンフリクトを解消したことをメッセージに記載する
コミットが成功していることを確認する
9. コンフリクトを防ぐ
・複数人で同じファイルを変更しない
・pullやmergeする前にcommitしておく
・pullするブランチに移動してからpullする
10. GitHub Flow を使用した開発手順
必ずプルリクエストによるレビューを行ってコードの品質を担保する
開発フローをシンプルにすることで開発に参加しやすくなる
masterがリリースしているコードとなる事で機能単位の切り戻しがしやすくなる
【図解】git-flow、GitHub Flowを開発現場で使い始めるためにこれだけは覚えておこう:こっそり始めるGit/GitHub超入門(終) - @IT
講座の感想
まずはGitHub Flowを小規模な開発で導入したいと思いました。
コンフリクトの解消方法やコンフリクトを防ぐ運用ルールをチームで共有する為に今回の講座にあるGitの仕組みを理解して説明できる必要があるので、まずは個人で利用して、理解を深めていきたいと思います。
Git 基本コマンド
はじめに
2年前に購入していたUdemyのGit講座を始めました。
www.udemy.com
記事作成時点でプライベートリポジトリが無料で使えるといった変更もありますがGitの仕組みやコマンドの使い方は変わらないと思うので前向きに取り組みます。
jp.techcrunch.com
目次
1. ローカルリポジトリの新規作成
git init
実行すると空のローカルリポジトリが作成される
ローカルリポジトリには.git ディレクトリ(隠しフォルダ)が作成される
.git ディレクトリにローカルリポジトリのデータが保存されている
・objects … リポジトリの本体 (ツリーファイル、コミットファイル)
・config … Gitの設定ファイル (インデックスファイル)
3. ワークツリーの変更をステージに追加
git add .
index.html ファイルを作成して、その変更をステージに追加する
5. 変更状況を確認する
git status
ワークツリーにコミットすべき変更がない状況を確認する
index.html を変更してステージに追記すべき情報が有る状況を確認する
git add を実行して、コミットすべき情報が有る状況を確認する
git commit を実行して、コミットすべき変更がない状況を確認する
6. ワークツリーとステージ間の変更状況を確認する
git diff
index.html の変更した内容を確認する
ステージに追記後、ワークツリーとステージの間に差が無い事を確認する
8. ファイルの変更履歴を確認する
# 全ての変更履歴を表示 git log
#変更履歴の要点を一行で表示 git log --oneline
# ファイルの変更差分を表示 git log -p [ファイル名]
# 表示するコミット数を制限 git log -n [コミット数]
9. ファイルの削除を記録する
# ワークツリーとリポジトリのファイルを削除 git rm [ファイル名]
ファイルの削除を実行する
ステージにファイルの削除を実行した、という変更状況が記録されている
# ワークツリーにファイルは残してリポジトリのファイルを削除 git rm --cashed [ファイル名]
ファイルの削除を実行する
ステージに削除を実行したことが記録され、リポジトリにファイルが無いため
ワークツリーに残ったindex.htmlがリポジトリに存在しないと表示されている
Chages to committed : コミットされていないステージの変更
Untracked files : リポジトリに存在しないワークツリーのファイル
10. ファイルの移動を記録する
git mv [旧ファイル名] [新ファイル名]
ファイル名の変更を実行する
ステージにファイル名の変更を実行した、という変更状況が記録されている
講座の感想
Gitの仕組みとコマンドを図で説明してもらえるのでわかりやすかったです。
ワークツリー、ステージ、リポジトリの役割を理解する事が重要だと感じました。