CATEGORY プログラミング

Headless CMSを作る

最初の業務で使ったVue.jsと業務で使うことの多い.NET系のフレームワークで何か作ってみたいと思い、Headless CMSでブログを作ってみた。CI/CDまで組んで継続的に開発をしていこうと思ったら土台を作るだけで1週間ほどかかったのでその時の手順を後世に残していこうと思う。 Headless CMSの選定 Vueの公式サイトではButter CMSを使ったブログの作成手順が紹介されているがこれは個人利用であってもお金がかかってしまうため、1ユーザーであればFreeのPrismicを使った。Prismicは言語ごとのチュートリアルがものすごく充実しているのでやりたいことは探せばほぼDocumentに乗っていると思う。これで無料はヤバイ。 ローカルで動かす。 .NET Coreプロジェクトの作成 以下のコマンドで.NET Coreプロジェクトの作成とSPA Extensionパッケージの追加をやります。

ここにVue cliプロジェクトを追加し、Coreに設定を追加していきます。 Vue.jsを埋め込むための設定 PrismicのGitHubにVueのテンプレートがあるのでクローンします。

npm installも忘れずに ここまででフォルダ構成はこんな感じ

次は.csprojを書き換えていきます。vue cli使ったことのある人なら見覚えのあるコマンドが並んでいるはず。

コード側 Vue.jsとCoreを繋ぐコードを書きます。

次にStartup.csの編集

これで.NET Coreの上でVue.jsを動かすことができます。

pyenv備忘録 よく使うコマンド

インストールされているPythonの確認

*が付いているのが現在適用されているバージョン インストール可能なPythonの確認

Pythonのインストール

ローカルに特定のPython環境を適用 ローカルはグローバルよりも優先されます。

Python環境に名前を付けて仮想環境を作成する 同じPythonバージョンを複数環境で使いたい場合に有用 hogeという名前のPython環境を作成

Djangoでmigrationのやり直しが上手くいかない

Djangoのmigrationをやり直したくなったけれど、色々試したら、

で psycopg2.errors.UndefinedColumn: column "<field名>" does not existといったエラーが出て、後戻りできなくなったりする。 僕みたいによく分かってない人は、一度全部消してからやり直したほうが絶対早い。 djangoでmigrateができない 下のコマンドは、同じSchemaのテーブルを全削除するコマンド。

これを実行してからマイグレーションすれば確実。

you cannot alter to or from M2M fields, or add or remove through= on M2M fields

で、

のエラーで苦しめられたので備忘録。 "Django migration error :you cannot alter to or from M2M fields, or add or remove through= on M2M fields"(stack overflow) 要は、DBを作る時に、古いテーブルが邪魔をしてmigrationできないよ! と言うことらしい。 上記リンクに飛ぶと、initial.pyでFieldを消す処理を加えると言う対応を紹介していたが、 面倒だったので、テーブルをいったん消去して、もう一度migrationをかけて解決した。

Djangoで新規にモデルを作成したのにmigration時に「No changes detected」となった時の対処法

Djangoプロジェクトを作成し、新しくモデルを作成して、migrationを書けた時に、「No changes detected」と表示されてしまう。 モデルを変えたのになぜ???と思ってググルと

とmigrationするときに、プロジェクト名を指定しないといけないらしい。 python manage.py makemigrationsだけでも、上手くいっている人も、いるため、謎は深まるが、変更が反映されないときは、プロジェクト名を指定してあげると確実

Djangoの開発環境を作る

Djangoの開発環境を作成した時の備忘録。 2020年2月17日にコピペでCentOS7の初期設定、PythonインストールからMySQLサーバーにログインまでできることを確認。 作成する環境 OS : CentOS7 Database : MySQL フレームワーク:Django 言語:Python3.7 使用ツール Vagrnat 仮想環境を管理するためのツールです。 Vagrantfileを用意すると、ファイルの内容に沿ったコマンドが自動で実行されるため、このファイルを共有するだけで、同じ環境を簡単に用意することができます。 Virtual Box 仮想化ソフトウェア・パッケージの一つ。仮想環境を用意するために必要なツールです。 Python環境は、Ubuntu仮想環境の上に構築します。 仮想環境の構築 現時点で、Cent OSのVagrant Boxファイルがインストールできているかを確認します。できていない場合は、各自でインストールをしてください。

次に、以下のコマンドでVagrantfileを作成します。これが仮想マシーンの鋳型のような物になります。

出来上がった、Vagrantfileを開き、以下のような行を追加します。

これで、PCのVagrantfileと同じディレクトリ のworkspace`フォルダと仮想マシーンの`django_rest_frameworkディレクトリ が同期されます。この辺りは各自のセンスで命名しましょう。 これで準備は全て整ったので、仮想マシーンを起動させていきます。

で仮想マシーンを起動させ

runnningになっていることを確認したら。

仮想環境に接続します。 これで仮想環境の構築までは完了! 基本設定

パスワードを聞かれた場合はvagrantと入力します。 Python環境を整える 今回は、仮想マシーン上でpyenvを使うことにします。

MySQLインストール参考 How to Install MySQL on CentOS 7 MySQL5.7の初期設定はこちら CentOS7にMySQLをインストールした時の備忘録…

.NET Core 3.0 MVCで作成したプロジェクトが起動しない

プロジェクトを作成した直後のデフォルトの状態で、エラーが起きた時の備忘録 状況① Visual Studio for MAC バージョン8.3 .NET Core3.0 MVC (プロジェクトの作成直後) 2019年11月28日時点 ふと、C#でプログラムを書いてみたくなり、.NET Core 3.0 プロジェクトを新規作成し、GUIでビルドすると、起動するはずのブラウザが起動しなかった。 .csprojファイルをいじったりと無駄な努力をしてみたが、結局解決せず。 dotnet コマンドでビルドを行い、ログから開いているポート番号を確認した。 localhost:5000 にアクセスし、アプリが起動していることを確認できた。 どのポートを開くかは、launch.jsonで設定できるっぽい

状況② プロジェクト作成後のデフォルト時に怒る時のエラーです。 <code>dotnet run</code>の後に証明書がないというエラーが出る。

.NET Coreプロジェクトの作成時にHTTPS/HSTS をオプトアウトする必要があります。 プロジェクト作成時の HTTPS/HSTS のオプトアウト

Azure Functionチュートリアルをやってみた

.NET Core2.2でAzure Functionのプロジェクトを作成できるチュートリアルがあったのでやってみました。 Link:関数の作成 – C# (公式ドキュメント) Azure Functionはサーバーレスなサービスで、料金もあまりかからないところも魅力です。 Functionの価格設定は、毎月の関数の実行回数から算出されており、100万回アクセスまでは、無料(参考)となっているため、個人利用であればほぼ使い放題です。 今回は、このAzure Functionを試していきます。 プロジェクトの作成 選択するのはマーカーで印がつけられた部分 Function ランタイム :.NET Core2.2 関数テンプレート : HTTPトリガー → HTTP要求がトリガーとなって関数が呼ばれます。 ストレージアカウント : ストレージアカウントエミュレーター 承認レベル : Anonymous →Anonymousとすると、全てのクライアントからトリガーできます。チュートリアルのなので、とりあえずAnonymousとしました。 作成ボタンをクリックすると、プロジェクトが作成されます。 関数だけなので、かなりシンプルな構成ですね。

の部分が、関数名になります。 試しに「F5」キーを押して実行してみましょう。 Azure Function Core Toolsと呼ばれるコンソールが表示され、アプリケーションの動作が確認できます。 Visual Studioさん流石です コンソール画面の出力から、 赤線部のURLをコピーし、ブラウザーでの応答を確認します。 http://localhost:7071/api/Function1?name=debobonetとURLをたたいたら、Hello, debobonetという出力が返ってくることが確認できます。 これで、ローカル環境での開発は終わりです。簡単ですね Azureにデプロイ 次はAzureにプロジェクトを発行していきます。本来であれば、コマンドを叩いたりなどの操作が必要だったりすることが多いのですが、Visual Studioにはデプロイの機能も備わっています。 「ソリューションエクスプローラー」から、プロジェクトを右クリックし、「発行」を選択すると以下の画面へと遷移します。 Visual Studio Proのライセンスを持っていると、5000円分のAzureクレジットも付いてくるため、Visual Studio Professionalというサブスクリプションが選択できます。…

LINQの書き方(C#)

LINQとは LINQについて、Webサイトで調べると、"LINQはプログラミング言語(C#やVB)に統合されたクエリ用言語です。通常データベースアクセスに使用するSQLが、C#やVBのプログラム内では文字列として扱われるのに対し、LINQはそれ自体が言語に統合されたクエリとして認識されます。( 参考 )などと書かれていたりしますが、書籍管理アプリでLINQを使う場合のサンプルがあったほうが、わかりやすいかと思いますので、サンプルを貼っていきます。 基本的な考え方 ここでは、蔵書テーブルに対するやり取りのサンプルコードを使用します クエリ文の宣言

条件を加える

リストとして実体化する

1~3までの処理を一行にまとめる

処理を一行でまとめるとシンプルなコードが書けるのですが、 クエリ文を作成するところと、実体化する部分を分けることによって 、検索やソートの処理を簡単に実装することができます。以下は参考です。 Microsoft Document→ ASP.NET Core の Razor Pages と EF Core – 並べ替え、フィルター、ページング やりがちなミス 演習を進めていくと、貸し出しテーブルの「ステータス」と書籍マスタの書籍名を一つのページに表示させたいという場面があるかと思います。 その時に、以下のようにLINQを書くと、上手くいきません。

理由としては、上の図を見てもらえば分かると思うのですが、テーブルの設計上、BorrowBooksテーブルからしか、Booksテーブルの内容を参照できないことが原因になります。 他のテーブルのデータを取ってきたい場合は、青い矢印でたどっていくように、以下のようにコードを書くと上手くいくと思います。

Pythonでデータ加工(スクレイピング編)

BeautifulSoupというライブラリを使うと、簡単にスクレイピングができるので、そのことについてメモ

soup変数に格納された文字列を加工することが以下のように簡単にできます。