初心者SEのつぶやき (original) (raw)
やりたいこと
最近流行りのRustで開発したい。
Rustのデスクトップアプリケーションを開発するフレームワークにTauriがあるので
環境構築を行ってく。
環境構築
下記を参考にしている。
Microsoft Visual Studio C++ Build Toolsのインストール
下記からインストールを行う。
WebView2のインストール
WebView2を下記からインストールする。
Rustのインストール
下記からインストーラーをダウンロードして実行する。
ビルド
下記コマンドを実行する。
npx create-tauri-app
対話モードになるので、プロジェクトに合わせて回答する。
今回の回答は下記とした。
質問内容 | 回答 |
---|---|
Project name | tauri-app |
Choose which language to use for your frontend | TypeScript / JavaScript |
Choose your package manager | npm |
Choose your UI template | React |
Choose your UI flavor | TypeScript |
設定完了後、プロジェクトディレクトリに移動し、パッケージをインストールする。
npm install
起動する。
npm run tauri dev
配布用インストーラーを作成
src-tauri/tauri.conf.json
内の"identifier": "com.tauri.dev",
の値を任意の値に変更する。
変更後、下記コマンドを実行する。
npm run tauri build
実行後しばらく待つとsrc-tauri/target/release
内に諸々作ってくれる。
コマンド実行後
感想
Rust勉強したいのでアウトプット作成に使っていきたい。
やりたいこと
Dockerを利用して、Go言語(Gin)の環境構築を行いたい。
手順
ファイル構成
. ├── app │ ├── go.mod │ ├── go.sum │ └── main.go ├── Dockerfile │── docker-compose.yml └── README.md
Dockerfileの作成
GoのDockerfileを作成
FROM golang:1.18
RUN apt-get update && apt-get install -y git WORKDIR /go/src/app COPY ./app .
CMD ["go", "run", "."]
docker-compose.ymlを作成
今後DB連携などを考えdocker-composeを用いる。
version: "3" services: app: container_name: ir-backend build: context: . dockerfile: ./Dockerfile tty: true volumes: - ./app:/go/src/app ports: - 8080:8080
appフォルダの作成
appフォルダを作成し、移動する。
mkdir -p ./app cd ./app
Goモジュールを初期化する
go mod init helloworld
Ginをインストール
go get -u github.com/gin-gonic/gin
main.goを作成
localhost:8080にアクセスした時にHello World
をJSON形式で返すようにする。
package main
import ( "github.com/gin-gonic/gin" )
func main() { router := gin.Default()
router.GET("/", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "Hello World",
})
})
router.Run(":8080")
}
起動
下記コマンドで起動する。
docker compose up --build
localhost:8080に接続し、{"message": "Hello World"}
がかえってきたら成功
これは2024/04/02時点の情報です。
やりたいこと
作成したRailsアプリを無料でデプロイしたい。
利用するサービス
Render.com
webアプリ公開することができるPaas
Neon
PostgreSQLのデプロイサービス
デプロイ手順
Neonデプロイ
はじめにNeonの方からセットアップする。
- 公式サイトにアクセスしてFree Tierでアカウント登録を行う。
- 画面の指示に従ってdatabaseを作成する。
- DashbordからConnection Detailsを開く。
- Connection Details内のconnection stringをNode.jsに切り替える。
その下に出てきた.envタブを選択する。
Neonの設定画面 - タブ内にある
PGHOST
,PGDATABASE
,PGUSER
,PGPASSWORDP
,ENDPOINT_ID
をメモする。
もしPGPASSWORDが不明の場合、サイドバーのbranchsのRolesから
リセットパスワードを実行し、再度passwordを発行する。
※この内容は秘匿情報なので絶対に他人に公開しないでください - メモした内容を元に
EDITOR="vi" rails credentials:edit
コマンドでrails内のconfig/credentials.yml.enc
に下記内容を追加する。
neon:
username: PGUSERの内容
host: PGHOSTの内容
database: PGDATABASEの内容
password: PGPASSWORDの内容
config/database.yml
に下記内容を追加する。
production:
<<: *default
host: <%= Rails.application.credentials.neon&.fetch(:host) %>
database: <%= Rails.application.credentials.neon&.fetch(:database) %>
username: <%= Rails.application.credentials.neon&.fetch(:username) %>
password: <%= Rails.application.credentials.neon&.fetch(:password) %>
ssl_mode: verify_identity
sslca: "/etc/ssl/certs/ca-certificates.crt"
Renderデプロイ
config/puma.rb
に下記内容を追加する。
workers ENV.fetch("WEB_CONCURRENCY") { 2 } preload_app!
config/environments/production.rb
に下記を記載する。
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present? || ENV['RENDER'].present?
bin/render-build.sh
を作成し、下記コマンドを記載する。
set -o errexit
bundle install bundle exec rake assets:precompile bundle exec rake assets:clean bundle exec rake db:migrate
- 公式サイトでRenderの登録を行う。
- 登録できたらダッシュボードのヘッダーのnewからWeb Serviceをクリックする。(対象GitHubリポジトリと連携する。)
renderヘッダー - 登録時の内容は下記となる。
項目 | 入力内容 |
---|---|
Branch | デプロイしたいブランチ名 |
Runtime | Ruby |
Build Command | ./bin/render-build.sh |
Start Command | bundle exec puma -C config/puma.rb |
Instance Type | Free |
- 画面下部の
Advanced
内のAdd Environment Variable
にconfig/master.key
に記載の文字列をRAILS_MASTER_KEY
として登録する。 Create Web Service
をクリックするとデプロイ開始- デプロイ完了し下記画面のURLをクリックするとデプロイしたアプリにアクセスできる。
render dashbord
感想
Renderの記事は多かったが、DBサービスに関してはあまり情報がなく
苦戦した。
スタートアップアプリや個人開発だとあまりコストかけたくないかなと思うので、今回の記事が参考になったら幸いです。
やりたいこと
導入方法
RSpecのインストール
gemファイルにrspec-rails
とfactory_bot_rails
を記載する。
FactoryBotはテストデータ生成をしてくれる便利ライブラリのため、
ついでにインストールする。
group :development, :test do gem "rspec-rails" gem "factory_bot_rails" end
Gemfile更新後、bundle install
を行う。
その後、下記コマンドを叩き、動かすために必要なファイルを生成する。
rails g rspec:install
rspec
を叩き、レスポンスが返ってきたら、インストール成功となる。
初期設定
testディレクトリの削除
テストコードは、specフォルダ以下に作成するため、
既存のtestディレクトリは削除する。
rm -r test/
FactoryBotの設定
テストでFactoryBotを利用する時、モジュール名を省略できるようにする。spec/rails_helper.rb
ファイルに下記内容を追記する。
config.include FactoryBot::Syntax::Methods
generate時の自動ファイル生成の設定
rails generater
コマンドでRSpec関係のファイルを自動生成されるための設定
config/application.rb
に下記内容を追記する。
config.generators do |g|
g.test_framework :rspec
end
テスト結果の出力設定
.rspec
ファイルに下記のように出力結果の設定ができる。
--require spec_helper --color --format d
感想
調べたら色々カスタマイズできそうだったので今後まとめたい。
今回の内容が参考になったら幸いです。
やりたいこと
railsアプリケーションにて、deviseを用いた認証機能を制限したい。
例) サインアップ機能の廃止など...
導入方法は下記記事を参照locomocosan.hatenablog.com
機能を制限する方法
deviseの標準機能を制限するには、app/models/user.rb
のファイルを変更必要がある。
class User < ApplicationRecord
devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable end
デフォルトで有効になっている機能とモジュールは下記となる。
モジュール | 機能 |
---|---|
database_authenticatable | パスワードの暗号化 |
registerable | サインアップ |
recoverable | パスワードリセット |
rememberable | クッキーにログイン情報を保持 |
validatable | バリデーション |
追加で使えるモジュールと機能については下記となる。
モジュール | 機能 |
---|---|
confirmable | メール認証 |
lockable | ロックアウト |
timeoutable | ユーザーセッションのタイムアウト |
trackable | ユーザーアクティビティをトラッキング |
omniauthable | 外部プロバイダーを利用した認証 |
もしサインアップ機能を廃止したい場合は、registerable
を削除することで
実装できる。
また、googleアカウントなどの外部のプロバイダーを利用した認証を行いたい
場合、omniauthableを有効にすることで実装が可能になる。(別途設定など必要)
感想
viewやコントローラーの編集、認証機能のカスタマイズなど
まだまだ奥が深そうなので、別の機会にまとめたい。
今回の内容が参考になったら幸いです。
やりたいこと
よく使うGitコマンドをまとめたい。
よく使うGitコマンド(適宜更新)
- ステージエリアにファイル追加
git add ファルパス
- コミットコマンド
git commit -m "コミットコメント"
- リモートブランチに反映(プッシュコマンド)
git push
- リモートブランチの内容を反映(プルコマンド)
git pull
- リモートリポジトリの最新の履歴の取得
git fetch
- ブランチのマージ
git merge ブランチ名
- マージの取り消し
git merge --abort
- コミット履歴の閲覧
git log
- コミットの取り消し(コミットのログごと消す)
git reset --hard コミットのハッシュ値
- コミットのうち消し(コミットのログは残す)
git revert コミットのハッシュ値
- 現在のブランチを確認
git branch
- ブランチの移動
git switch ブランチ名 git checkout ブランチ名
用途別コマンドの使い方
開発用ブランチにMasterブランチの最新を取り込む
- masterにチェックアウト
git checkout master
- git pullでローカルのmasterを最新にする
git pull origin master
- 開発ブランチに移動
git checkout develop
- masterの内容をマージ
git merge origin master -m "コミットコメント"
あとがき
適宜一覧は更新していきます。
今回の内容が参考になったら幸いです。
やりたいこと
Pythonで動的に生成されているサイトをスクレイピングしたい。
(Pythonのバージョンは3.11.7を利用している)
方法
seleniumとwebdriver-managerを利用する。
インストール
- 下記コマンドでseleniumをインストールする。
pip install selenium
- 下記コマンドでwebdriver-managerをインストールする。
pip install webdriver-manager
実装例
必要なライブラリをimport
import os from selenium import webdriver from selenium.webdriver.chrome.service import Service from selenium.webdriver.common.by import By from webdriver_manager.chrome import ChromeDriverManager from selenium.webdriver.support.ui import WebDriverWait from selenium.webdriver.support import expected_conditions as EC
Chrome用のバイナリドライバをインストール & インスタンス生成
driver = webdriver.Chrome(service=Service(ChromeDriverManager().install()))
ページをロード
driver.get(対象のURL)
driver.implicitly_wait(10)
最後にインスタンス解放
driver.quit()
要素の取得&利用法(一部)
クラス名指定で要素取得
find_elementsメソッドで、input-formクラス要素を全て取得
class_contents = driver.find_elements(By.CLASS_NAME, "input-form")
#find_elementメソッドで、custom-buttonクラスのうち初めの一つ取得 button = driver.find_element(By.CLASS_NAME, "custom-button")
XATH指定で要素を取得
listbox = self.driver.find_element(By.XPATH, '//ul[@role="listbox"]')
- タグ名指定で要素を取得
list_items = listbox.find_element(By.TAG_NAME, 'li')
- ID名指定で要素を取得
tab_content = self.driver.find_element(By.ID, "abc")
- input要素を入力
input_content.clear() input_content.send_keys(入力したい内容)
- ボタン押下処理
wait = WebDriverWait(driver, 10) button.click() wait.until(EC.staleness_of(button))
スクショを撮る
driver.save_screenshot(保存先)
感想
スクレイピングはできるようになったが、やはり実行時間が長いので
高速化手段がないか検討したい&将来バッチ実行をさせてみたい。
今回の内容が参考になったら幸いです。