sObjectTypeの取得
オブジェクトを固定できるとき
sObjectType sObjType = Account.getSObjectType();
オブジェクトを固定でき無いとき
Map<String, sObjectType> sObjTypeMap = Schema.getGlobalDescribe().get(sObjectName);
レコードIDから
sObjectType sObjType = recordId.getSObjectType();
sObjectTypeの使い方
sObjectをnewする
オプションなし
sObject sObj = sObjType.newSObject();
IDあり
sObject sObj = sObjType.newSObject(sObjectID);
レコードタイプ指定
sObject sObj = sObjType.newSObject(sObjectType.getDescribe().getRecordTypeInfosByDeveloperName().get(recordTypeName), false);
//最終引数は、trueの場合、デフォルト値あり。
DescribeSObjectResultの取得
オブジェクトを固定できるとき
DescribeSObjectResult sObjectDescribe= Account.getSObjectType().getDescribe();
オブジェクトを固定でき無い時
DescribeSObjectResult sObjectDescribe= Schema.getGlobalDescribe().get(sObjectName).getDescribe();
DescribeSObjectResultの使い方
オブジェクトの情報を参照
レコードIDのプレフィックス
String objPref = sObjectDescribe.getKeyPrefix();
表示ラベル
String objLabel = sObjectDescribe.getLabel();
API参照名
String objName = sObjectDescribe.getName();
実行ユーザのオブジェクトへのアクセス権を確認
作成
Boolean canRead = sObjectDescribe.isCreateable();
参照
Boolean canRead = sObjectDescribe.isAccessible();
編集
Boolean canRead = sObjectDescribe.isUpdateable();
削除
Boolean canRead = sObjectDescribe.isDeletable();`
レコードタイプの情報を取得したい
RecordTypeInfoの取得
オブジェクトを固定できるとき
Map<Id, RecordTypeInfo> recTypeMap = Account.getSObjectType().getDescribe().getRecordTypeInfosById();//MapのキーはId
Map<String, RecordTypeInfo> recTypeMap = Account.getSObjectType().getDescribe().getRecordTypeInfosByName();//MapのキーはName(表示ラベル)
Map<String, RecordTypeInfo> recTypeMap = Account.getSObjectType().getDescribe().getRecordTypeInfosByDeveloperName();//MapのキーはDeveloperName(Api参照名)
オブジェクトを固定でき無い時
Map<Id, RecordTypeInfo> recTypeMap = Schema.getGlobalDescribe().get(sObjectName).getDescribe().getRecordTypeInfosById();//MapのキーはId
Map<String, RecordTypeInfo> recTypeMap = Schema.getGlobalDescribe().get(sObjectName).getDescribe().getRecordTypeInfosByName();//MapのキーはName(表示ラベル)
Map<String, RecordTypeInfo> recTypeMap = Schema.getGlobalDescribe().get(sObjectName).getDescribe().getRecordTypeInfosByDeveloperName();//MapのキーはDeveloperName(Api参照名)
RecordTypeInfoの使い方
レコードタイプ情報を参照
レコードタイプ名
String recTypeName = recTypeInfo.getName();
レコードタイプID
Id recTypeId = recTypeInfo.getRecordTypeId();
DeveloperName
Id recTypeId = recTypeInfo.getDeveloperName();
デフォルトレコードタイプか
Boolean isDefRecType = recTypeInfo.isDefaultRecordTypeMapping();
実行ユーザが使用可能か
Boolean isAvailable = recTypeInfo.isAvailable();
項目の情報を取得したい
DescribeFieldResultの取得
オブジェクト、項目とも固定できるとき
DescribeFieldResult field = Account.Name.getDescribe();
特定オブジェクトの全部の項目を取得したい場合。
Map<String, SObjectField> fields = Account.getSObjectType().getDescribe().fields.getMap();
for(SObjectField f : fields.values()) {
    DescribeFieldResult field  = f.getDescribe();
}
オブジェクトは固定できるが、項目は固定できないとき
DescribeFieldResult field = Account.getSObjectType().getDescribe().fields.getMap().get(fieldName).getDescribe();
オブジェクトも項目も固定できないとき
DescribeFieldResult field = Schema.getGlobalDescribe().get(sObjectName).getDescribe().fields.getMap().get(fieldName).getDescribe();
DescribeFieldResultの使い方
項目の情報を参照
表示ラベル
String fieldLabel = field.getLabel();
データ型
DisplayType dispType = field.getType();
補足:DisplayType※数式は、戻り値の型になる。

DisplayType	項目の型
String	テキスト、自動採番
TextArea	テキストエリア(ロング、リッチ含む)
Double	数値
Percent	パーセント
Currency	通貨
Picklist	選択リスト
MultiPicklist	複数選択リスト
Date	日付
Time	時間
DateTime	日付/時間
Boolean	チェックボックス
Phone	電話
Email	メール
URL	URL
Reference	参照関係、主従関係
ID	ID
Combobox	コンボボックス
address	住所
自動採番か
Boolean isAutoNumber = field.isAutoNumber();
数式か
Boolean isCalculated = field.isCalculated();
CascadeDeleteされるか(=主従か)
Boolean isCascadeDelete = field.isCascadeDelete();
親オブジェクトのsObjectType
SObjectType sobjType = field.getReferenceTo();
子リレーション名
String relationshipName = field.getRelationshipName();
文字数
Integer length = field.getLength();
桁数(全体)
Integer length = field.getPrecision();
桁数(小数点以下)
Integer length = field.getScale();
デフォルト値
Object defaultValue = field.getDefaultValue();
ヘルプテキスト
String helpText = field.getInlineHelpText();
nullが許可されているか(必須の逆)
Boolean isNilable = field.isNillable();
ユニークか
Boolean isUnique = field.isUnique();
外部IDか
Boolean isExternalID = field.isExternalID();
アクセス権を確認
参照
boolean isAccessible = field.isAccessible();
編集
boolean isUpdateable = field.isUpdateable();
作成
boolean isCreateable = field.isCreateable();
選択リスト値の情報を取得したい
PicklistEntryの取得
オブジェクト、項目とも固定できるとき
List<Schema.PicklistEntry> picklistEntries= Account.Type.getDescribe().getPicklistValues();
オブジェクトは固定できるが、項目は固定できないとき
List<Schema.PicklistEntry> picklistEntries = Account.getSObjectType().getDescribe().fields.getMap().get(fieldName).getDescribe().getPicklistValues();
オブジェクトも項目も固定できないとき
List<Schema.PicklistEntry> picklistEntries = Schema.getGlobalDescribe().get(sObjectName).getDescribe().fields.getMap().get(fieldName).getDescribe().getPicklistValues();
PicklistEntryの使い方
表示ラベル
String Label = picklistEntrie.getLabel();
API参照名
String Label = picklistEntrie.getValue();
デフォルト値かどうか
Boolean isDefaultValue= picklistEntrie.isDefaultValue()
有効or無効
Boolean isActive= picklistEntrie.isActive()://※レコードタイプが関係するかは未検証
Visualforceでの$ObjectType
似たようなものなのでついでに。

オブジェクト
オブジェクト情報
表示ラベル名
{!$ObjectType['Account'].Label}
API参照名
{!$ObjectType['Account'].Name}
プレフィックスコード
{!$ObjectType['Account'].keyPrefix}
アクセス権
作成
{!$ObjectType['Account'].createable}
参照
{!$ObjectType['Account'].accessible}
編集
{!$ObjectType['Account'].updateable}
削除
{!$ObjectType['Account'].deletable}
項目
項目情報
表示ラベル
{!$ObjectType['Account'].fields['Name'].Label}
API参照名
{!$ObjectType['Account'].fields['Name'].name}
空白にできるか(必須の逆)
{!$ObjectType['Account'].fields['Name'].nillable}
アクセス権
作成
{!$ObjectType['Account'].fields['Name'].createable}
参照
{!$ObjectType['Account'].fields['Name'].accessible}
編集
{!$ObjectType['Account'].fields['Name'].updateable}
使用例
IDからオブジェクト名取得
Id recId = 'XXXXXXXXXXXXXXXXXX';
String objName = recId.getSObjectType().getDescribe().getName();
keyPrefix(レコードIDの上3桁)からオブジェクト名取得
上3桁さえ正しければ良いみたい……

String keyPrefix = '001';
String objName = ID.valueOf(keyPrefix + '000000000000').getSObjectType().getDescribe().getName();
オブジェクト名とレコードタイプ名(Developer Name)から、レコードタイプのIDを取得
String sObjectName = 'Account';
String recordTypeDeveloperName = 'BusinessAccount'

ID recordTypeId =  Schema.getGlobalDescribe().get(sObjectName).getDescribe().getRecordTypeInfosByDeveloperName().get(recordTypeDeveloperName).getRecordTypeId()
SELECT * 的な

String sObjectName = 'Account';
String query = 'SELECT ';

for(String FieldName : Schema.getGlobalDescribe().get(sObjectName).getDescribe().fields.getMap().KeySet()){
    query += FieldName + ',';
}
query = query.removeEnd(',') + ' FROM ' + sObjectName;

List<sObject> records = Database.query(query);