【Salesforce】Apexの使い方メモ

Apexとは

Salesforceの開発に特化したプログラミング言語
→ライブラリのインストール不要でいきなりオブジェクトにアクセスできたりする
雰囲気はJavaに似てる

【kotlin】FragmentでViewBindingを導入する方法【Android開発】

2022/5/26追記
公式ページが十分分かりやすいのでこれ見れば十分ですね。。
https://developer.android.com/topic/libraries/view-binding

以下、元の文章。

kotlinでFragmentのViewBindingを導入する方法です。

Fragmentのkotlinファイルで以下の通りに実装します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment

class WalkThroughFirstFragment : Fragment(), View.OnClickListener {

private lateinit var binding: FragmentWalkThroughBinding

override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View {
binding = FragmentWalkThroughBinding.inflate(inflater, container, false)
return binding.root
}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)

binding.walkThroughButton1.setOnClickListener(this)
}

override fun onClick(view: View?) {

val intent = Intent(activity, SettingActivity::class.java)
startActivity(intent)
}
}

以上です。

2021年振り返り

はじめに

2021年を振り返ります!
ちゃんと振り返らないと何もしてない気がするのよね。。

何やったかほとんど覚えていないので、Twitterをベースに振り返ってみようと思います。

VR体験日記その1

11/28(日) 1日目

夜子供が寝た後から自分が寝るまでの数時間を何とかしたくてVRを買ってみた。
ネット記事とかでVRはすごいとよく見てたので、どんなもんやろ?と前々から思っていた。

色々VR機器について調べた結果、Ocuras Quest 2を買った。

Caching disabled for task ':app:mergeDebugNativeLibs' エラーの対処法

エラーについて

ビルド時に以下のエラーが発生しました

1
2
3
4
5
6
7
8
9
10
11
12
Caching disabled for task ':app:mergeDebugNativeLibs' because:
Build cache is disabled
Skipping task ':app:mergeDebugNativeLibs' as it is up-to-date.
Task :app:mergeDebugNativeLibs in app Finished
:app:mergeDebugNativeLibs (Thread[Execution worker for ':',5,main]) completed. Took 0.034 secs.
:app:stripDebugDebugSymbols (Thread[Execution worker for ':',5,main]) started.

> Task :app:stripDebugDebugSymbols NO-SOURCE
Task :app:stripDebugDebugSymbols in app Starting
Skipping task ':app:stripDebugDebugSymbols' as it has no source files and no previous output files.
Task :app:stripDebugDebugSymbols in app Finished
:app:stripDebugDebugSymbols (Thread[Execution worker for ':',5,main]) completed. Took 0.003 secs.

解決策

おそらくこのエラーの原因はtargetSDKバージョンが31以上であり、かつJDKバージョンが11より小さいことです。
以下の通りにすれば解決します。

  • JDKバージョンを11以上にする
  • Android Studio 2020.3(もしくはそれより最新版)をインストールする

JDKバージョンを11以上にするには、最新のAndroid Studioをダウンロードして、Android Studio → Preferences → Build Tools → GradleのGradle JDKを11以上に指定してください。

Activity間で自作ArrayListを渡す方法

Activity間で自作ArrayListを渡す方法です。
Kotlinです。
Parcelable化するところが肝です。

流れ

一覧画面から詳細画面に自作クラスのArrayListを渡す流れです。

一覧画面
MyListActivity.kt
詳細画面
MyDetailActivity.kt
渡すデータ
MyDataList:ArrayList<MyData>

送信元のActivity(MyListActivity.kt

1
2
3
4
val intent = Intent(this, MyDetailActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
intent.putParcelableArrayListExtra("MyDataList", MyDataList.list);
startActivity(intent)

送信するデータのリスト(MyDataList.kt

1
2
3
4
5
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class MyDataList(var list:ArrayList<MyData>) : Parcelable

送信する個別データ(MyData.kt

1
2
3
4
5
import android.os.Parcelable
import kotlinx.android.parcel.Parcelize

@Parcelize
data class MyData(var timeStamp: String) : Parcelable

送信先のActivity(MyDetailActivity.kt

1
2
3
4
5
6
7
8
9
10
11
12
13
import android.os.Bundle

class MyDetailActivity : Activity() {

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 本来はgetParcelableExtraが正しそうだけど以下のエラーになるのでgetSerializableExtraを使う
// Not enough information to infer type variable T
// val myDataList = intent.getParcelableExtra("MyDataList") as ArrayList<MyData>
val myDataList = intent.getSerializableExtra("MyDataList") as ArrayList<*>
setContentView(view)
}
}

ちなみにMyDataがただのStringやIntgerならputStringArrayListExtraなどを使えば良いのでParcelable化する必要はないです。

今回はMyDataが自作クラスなのでputParcelableArrayListExtraを使う必要があり、これを使うためにParcelable化が必要だったということです。

以上です。

Vue3でユニットテストツールのJestを入れたけど諦めた

ライブラリをインストール

1
2
3
4
5
6
7
8
9
# testライブラリ
npm install --save-dev jest
# for vue
npm install --save-dev babel-jest
npm install --save-dev babel-preset-env
npm install --save-dev babel-core@bridge
# for vue3
npm install --save-dev @vue/test-utils@next
npm install --save-dev vue-jest@next

test準備

プロジェクトルートディレクトリにjest.config.jsを作成する

※作成しない場合、以下のエラーになった。
Consider using the "jsdom" test environment.

1
2
3
module.exports = {
testEnvironment: "jsdom"
};

package.jsonに以下を追加する
npm testでテスト実行できるようにするため

1
2
3
"scripts": {
"test": "jest",
},

testコード作成

プロジェクトルートディレクトリに__tests__/unit/index.jsを作成する

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import { mount } from "@vue/test-utils";

// The component to test
const MessageComponent = {
template: "<p>{{ msg }}</p>",
props: ["msg"]
};

test("displays message", () => {
const wrapper = mount(MessageComponent, {
props: {
msg: "Hello world"
}
});

// Assert the rendered text of the component
expect(wrapper.text()).toContain("Hello world");
});

ここまで完了すれば、npm testでテスト実行できる。

と、ここまでは良いのだが、Vue.jsのコードに接続するコードを書くと以下のエラーになった
解決できず、諦めた。。

({"Object.<anonymous>":function(module,exports,require,__dirname,__filename,global,jest){<template>

【docker-compose】PostgreSQLを導入してみた

はじめに

docker-composeにPostgreSQLを導入したので、コードをメモしておきます。

POSTGRES_USERにuserを指定すると権限エラーになるところで結構ハマりました。。

./docker/postgresql/initdbフォルダにsqlファイルを入れれば自動的に実行されます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#docker-composeのバージョンを指定
version: '3.8'

services:
db:
image: postgres:13.3
restart: always
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: password
TZ: Asia/Tokyo
ports:
- '5432:5432'
volumes:
- ./docker/postgresql/data:/var/lib/postgresql/data
- ./docker/postgresql/initdb:/docker-entrypoint-initdb.d

【OAuth2】クライアントアプリのサンプルコード【NodeJS】

はじめに

OAuth2のクライアントアプリを作成したので、手順をメモしておきます。

環境

フロント
 Vue.js:3.0.0
バックエンド
 Express:4.17.1

【JS】json内のデータの位置を並び替える方法

JavaScriptでjson内のデータの位置を並び替える方法です。

例えば

1
2
3
4
5
{
"1":"test1",
"2":"test2",
"3":"test3",
}

これを

1
2
3
4
5
{
"3":"test3",
"1":"test1",
"2":"test2",
}

にしたい時に使う方法です。

以下は”hoge”データを3番目に入れる例です。

1
2
3
let pairs = Object.entries(beforeJson);
pairs.splice(3, 0, ["hoge", beforeJson["hoge"]]);
afterJson = Object.fromEntries(pairs);

上にある通り、一度配列にしてから順番を入れ替え、その後にjsonに戻せばOKです。

以上です。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×